Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Ayuda urgente con una funcion recursiva que utiliza FindNextFile!!!

Estas en el tema de Ayuda urgente con una funcion recursiva que utiliza FindNextFile!!! en el foro de Visual Basic clásico en Foros del Web. Hola, necesito ayuda urgente. Hice un programa para recorrer recursivamente el arbol de directorios empezando desde un directorio dado; el programa esta hecho con las ...
  #1 (permalink)  
Antiguo 10/04/2009, 13:30
 
Fecha de Ingreso: agosto-2008
Mensajes: 30
Antigüedad: 15 años, 8 meses
Puntos: 0
Pregunta Ayuda urgente con una funcion recursiva que utiliza FindNextFile!!!

Hola, necesito ayuda urgente.

Hice un programa para recorrer recursivamente el arbol de directorios empezando desde un directorio dado; el programa esta hecho con las APIs FindFirstFile y FindNextFile y funciona bien, pero el problema es que mientras se ejecuta la funcion recursiva, pierdo el control de la aplicacion y no puedo hacer click en ningun lado ni tampoco puedo mover de lugar el formulario, y cuando lo hago, la aplicacion se cuelga. Alguien sabe por que es esto?

El codigo es el siguiente (require un command button y una statusbar con sus nombres predeterminados):

Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function PathIsDirectory Lib "shlwapi.dll" Alias "PathIsDirectoryA" (ByVal pszPath As String) As Long
Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long

Private Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type

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 * 260
cAlternate As String * 14
End Type

Function delete_Null(OriginalStr As String) As String
If (InStr(OriginalStr, Chr(0)) > 0) Then
OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
End If
delete_Null = OriginalStr
End Function

Function IsDirectory(sPath As String) As Boolean
IsDirectory = PathIsDirectory(sPath)
End Function

Private Sub list(path As String)
Dim filedir As Long
Dim infofiledir As WIN32_FIND_DATA
Dim filename As String

filedir = FindFirstFile(path & "\*", infofiledir)
If filedir <> Error Then
filename = delete_Null(infofiledir.cFileName)
If (filename <> ".") And (filename <> "..") Then
StatusBar1.Panels(1).Text = path & "\" & filename
If IsDirectory(path & "\" & filename) = True Then
list (path & "\" & filename)
End If
End If
End If
While FindNextFile(filedir, infofiledir)
filename = delete_Null(infofiledir.cFileName)
If (filename <> ".") And (filename <> "..") Then
StatusBar1.Panels(1).Text = path & "\" & filename
If IsDirectory(path & "\" & filename) = True Then
list (path & "\" & filename)
End If
End If
Wend
FindClose (filedir)
End Sub

Private Sub Command1_Click()
list ("c:\Program Files")
End Sub
  #2 (permalink)  
Antiguo 10/04/2009, 13:56
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Ayuda urgente con una funcion recursiva que utiliza FindNextFile!!!

Puedes usar DoEvents dentro del bloque While para que la ventana continúe respondiendo a los mensajes del sistema.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:49.