Código
' 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:
Código
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?