Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: AlxSpy en 23 Agosto 2011, 06:58 AM

Título: [RESUELTO]¿como comprobar varios resultados en un solo valor? - GetFileAttribute
Publicado por: AlxSpy en 23 Agosto 2011, 06:58 AM
el api GetFileAttributes en un solo resultado devuelve todos los atributos de un archivo ejem : +s +r / +s +r +h o lo que sea, para comprobar cada atributo que devuelva en ese UNICO resultado lo hago de esta forma

if res = FILE_ATTRIBUTES_SYSTEM then atributos = atributos & "+S "
if res = FILE_ATTRIBUTES_HIDDEN then atributos = atributos & "+H"
if res = FILE_ATTRIBUTES_READONLY + FILE_SYSTEMHIDDEN then atributos = atributos & "+R +H "[


weno y asi se hace todo como en 30 lineas :S, ¿habra alguna manera mas simplificada de comprobar sin tanto codigo? ¿podrian dar alguna explicacion? o url donde expliquen.
Título: Re: ¿como comprobar varios resultados en un solo valor? - GetFileAttributes
Publicado por: AlxSpy en 25 Agosto 2011, 02:13 AM
logre simplificar mi codigo de 30 lineas a 9 lineas:

    Dim Atributos As String, Res As Long
    Res = GetFileAttributes(txtFile.Text)
   
    If Res = FILE_ATTRIBUTE_NORMAL Then Res = Res - FILE_ATTRIBUTE_NORMAL: Atributos = Atributos & "+N "
   
    If Res >= FILE_ATTRIBUTE_ARCHIVE And Res <= (FILE_ATTRIBUTE_ARCHIVE + FILE_ATTRIBUTE_HIDDEN + FILE_ATTRIBUTE_READONLY + FILE_ATTRIBUTE_SYSTEM) Then Res = Res - FILE_ATTRIBUTE_ARCHIVE: Atributos = Atributos & "+A "
   
    If Res >= FILE_ATTRIBUTE_DIRECTORY And Res <= (FILE_ATTRIBUTE_DIRECTORY + FILE_ATTRIBUTE_HIDDEN + FILE_ATTRIBUTE_READONLY + FILE_ATTRIBUTE_SYSTEM) Then Res = Res - FILE_ATTRIBUTE_DIRECTORY: Atributos = Atributos & "+D "

    If Res >= FILE_ATTRIBUTE_SYSTEM Then Res = Res - FILE_ATTRIBUTE_SYSTEM: Atributos = Atributos & "+S"
   
       
    If Res >= FILE_ATTRIBUTE_HIDDEN Then Res = Res - FILE_ATTRIBUTE_HIDDEN: Atributos = Atributos & "+H "
   
   
    If Res >= FILE_ATTRIBUTE_READONLY Then Res = Res - FILE_ATTRIBUTE_READONLY: Atributos = Atributos & "+R "
   
    MsgBox Atributos
Título: Re: ¿como comprobar varios resultados en un solo valor? - GetFileAttributes
Publicado por: BlackZeroX en 25 Agosto 2011, 03:05 AM
.
Nada que ver...

Lee algo sobre Operaciones binarias... ademas le faltan muchos mas atributos aqui te dejo mi codigo.

Código (vb) [Seleccionar]


Option Explicit

Enum FILE_ATTRIBUTE
    [ReadOnly] = &H1
    Hidden = &H2
    System = &H4
    'not used = &H8
    DIRECTORY = &H10
    Archive = &H20
    Device = &H40
    Normal = &H80
    Temporaly = &H100
    SparseFile = &H200
    ReparsePoint = &H400
    Compressed = &H800
    Offline = &H1000
    NotContentIndexed = &H2000
    Encrypted = &H4000
    NoExits = &HFFFFFFFF
End Enum

Private Declare Function GetFileAttributes Lib "kernel32.dll" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long

Private Sub Form_Load()
Dim sRet        As String
Dim lRes        As Long
Const RUTA As String = "c:\aaaa"
     
    lRes = GetFileAttributes(RUTA)
   
    If ((lRes And FILE_ATTRIBUTE.NoExits) = FILE_ATTRIBUTE.NoExits) Then
        sRet = "No Exits This File: " & RUTA
    Else
        If ((lRes And FILE_ATTRIBUTE.Normal) = FILE_ATTRIBUTE.Normal) Then sRet = sRet & "+N "
        If ((lRes And FILE_ATTRIBUTE.Archive) = FILE_ATTRIBUTE.Archive) Then sRet = sRet & "+A "
        If ((lRes And FILE_ATTRIBUTE.DIRECTORY) = FILE_ATTRIBUTE.DIRECTORY) Then sRet = sRet & "+D "
        If ((lRes And FILE_ATTRIBUTE.System) = FILE_ATTRIBUTE.System) Then sRet = sRet & "+S "
        If ((lRes And FILE_ATTRIBUTE.Hidden) = FILE_ATTRIBUTE.Hidden) Then sRet = sRet & "+H "
        If ((lRes And FILE_ATTRIBUTE.[ReadOnly]) = FILE_ATTRIBUTE.[ReadOnly]) Then sRet = sRet & "+R "
        If ((lRes And FILE_ATTRIBUTE.Temporaly) = FILE_ATTRIBUTE.Temporaly) Then sRet = sRet & "+Temporaly "
        If ((lRes And FILE_ATTRIBUTE.SparseFile) = FILE_ATTRIBUTE.SparseFile) Then sRet = sRet & "+SparseFile "
        If ((lRes And FILE_ATTRIBUTE.ReparsePoint) = FILE_ATTRIBUTE.ReparsePoint) Then sRet = sRet & "+ReparsePoint "
        If ((lRes And FILE_ATTRIBUTE.Compressed) = FILE_ATTRIBUTE.Compressed) Then sRet = sRet & "+Compressed "
        If ((lRes And FILE_ATTRIBUTE.Offline) = FILE_ATTRIBUTE.Offline) Then sRet = sRet & "+Offline "
        If ((lRes And FILE_ATTRIBUTE.NotContentIndexed) = FILE_ATTRIBUTE.NotContentIndexed) Then sRet = sRet & "+NotContentIndexed "
        If ((lRes And FILE_ATTRIBUTE.Encrypted) = FILE_ATTRIBUTE.Encrypted) Then sRet = sRet & "+Encripted "
    End If

    MsgBox sRet
   
End Sub



Dulces Lunas!¡.
Título: Re: ¿como comprobar varios resultados en un solo valor? - GetFileAttributes
Publicado por: BlackZeroX en 25 Agosto 2011, 03:29 AM
te dejo un enlace a un libro que seguro lo encuentras algo interesante...

http://books.google.com/books?id=ZDin4axsYoEC&pg=PA164&lpg=PA164&dq=FILE_ATTRIBUTE+%26h40&source=bl&ots=x539D8QqWX&sig=-8IXCtdv4bN13SuE-sD5MHYqt6o&hl=es&ei=jaJVTtSgK-yCsgLEnp26Bw&sa=X&oi=book_result&ct=result&resnum=4&ved=0CDkQ6AEwAw#v=onepage&q&f=false

Dulces Lunas!¡.
Título: Re: ¿como comprobar varios resultados en un solo valor? - GetFileAttributes
Publicado por: AlxSpy en 27 Agosto 2011, 02:27 AM
ve yo que pense que me faltaba solo el atributo temporary xP, veo que se reduce aun mas usando el and, leere eso de las operaciones binarias weno gracias.