[DUDA] sobre apis Findnextfile en vb6

Iniciado por AlxSpy, 30 Marzo 2011, 18:10 PM

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

AlxSpy

hola vi las apis para listar archivos, hice este codigo:

Código (vb) [Seleccionar]

' 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 (vb) [Seleccionar]
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?

79137913

#1
HOLA!!!

Es necesaria velocidad?

si no es asi :
Código (vb) [Seleccionar]
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!!!
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

79137913                          *Shadow Scouts Team*

AlxSpy

pense que el dir era más veloz  :xD , y si es más facil hacerlo de esa manera.