hola vi las apis para listar archivos, hice este codigo:
' 1 command1 + 1 text1
Option Explicit
Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
'Estructura WIN32_FIND_DATA para info de archivos
Private Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * 300
cAlternate As String * 14
End Type
Private Declare Function FindFirstFile _
Lib "kernel32" _
Alias "FindFirstFileA" ( _
ByVal lpFileName As String, _
lpFindFileData As WIN32_FIND_DATA) As Long
'Api FindNextFile (busca el siguiente)
Private Declare Function FindNextFile _
Lib "kernel32" _
Alias "FindNextFileA" ( _
ByVal hFindFile As Long, _
lpFindFileData As WIN32_FIND_DATA) As Long
'Api GetFileAttributes (para recuperar los atributos de los archivos)
Private Declare Function FindClose _
Lib "kernel32" ( _
ByVal hFindFile As Long) As Long
Private Sub Command1_Click()
Dim hFind As Long, RNext As Long, tmP As String, WFD As WIN32_FIND_DATA, Archivo As String, P As Long, Total As Long
hFind = FindFirstFile("d:\*.*", WFD)
tmP = "hFind: " & hFind & vbCrLf
RNext = FindNextFile(hFind, WFD)
While RNext <> 0
Total = Total + 1
tmP = tmP & "rNext: " & RNext & vbCrLf
Archivo = WFD.cFileName
Archivo = Replace(Archivo, Chr(0), "") 'borra los nulos
tmP = tmP & Archivo & vbCrLf
RNext = FindNextFile(hFind, WFD)
Wend
FindClose hFind
Text1.Text = "Total archivos: " & Total & vbCrLf & tmP
End Sub
ejecuto el codigo , y el resultado es una lista en la que se repiten los nombres de los ficheros, luego intente ejecutandolo compilado y el resultado es el mismo:
http://hosting11.imagecross.com/image-hosting-64/3767error.jpg
*luego encontre la solucion cambiando el codigo de esta manera:
Private Sub Command1_Click()
Dim hFind As Long, RNext As Long, tmP As String, WFD As WIN32_FIND_DATA, Archivo As String, P As Long, Total As Long
hFind = FindFirstFile("d:\*.*", WFD)
tmP = "hFind: " & hFind & vbCrLf
RNext = FindNextFile(hFind, WFD)
While RNext <> 0
Total = Total + 1
tmP = tmP & "rNext: " & RNext & vbCrLf
Archivo = WFD.cFileName
P = InStr(1, Archivo, Chr(0))
If P > 0 Then Archivo = Left(Archivo, P - 1)
tmP = tmP & Archivo & vbCrLf
RNext = FindNextFile(hFind, WFD)
Wend
FindClose hFind
Text1.Text = "Total archivos: " & Total & vbCrLf & tmP
End Sub
el resultado:
http://hosting11.imagecross.com/image-hosting-64/4585solucion.jpg
*weno, no entiendo si los 2 codigos hacen lo mismo por que uno falla y el otro funciona bien, alguien podria explicar?
HOLA!!!
Es necesaria velocidad?
si no es asi :
Private Sub Form_Load()
Dim Archivo As String
Archivo = Dir("C:")
Do Until Archivo = ""
Debug.Print Archivo
Archivo = Dir
Loop
End Sub
P.D: Conste que no es la mejor manera de hacerlo, pero es facil.
GRACIAS POR LEER!!!
pense que el dir era más veloz :xD , y si es más facil hacerlo de esa manera.