[RESUELTO]¿como comprobar varios resultados en un solo valor? - GetFileAttribute

Iniciado por AlxSpy, 23 Agosto 2011, 06:58 AM

0 Miembros y 1 Visitante están viendo este tema.

AlxSpy

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.

AlxSpy

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

BlackZeroX

#2
.
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!¡.
The Dark Shadow is my passion.


AlxSpy

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.