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.
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
.
Nada que ver...
Lee algo sobre Operaciones binarias... ademas le faltan muchos mas atributos aqui te dejo mi codigo.
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!¡.
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!¡.
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.