Crear explorador de archivos

rafael
09 de Octubre del 2005
Hola estoy haciendo una aplicaicon q entre otras cosas tiene q buscar una foto en el pc y moverla a la carpeta predeterminada , guardando la ruta en la BD para mostrar nombre,descripcion y la foto si la elijo. ¿como podria hacer eso? un saludo¡

mvallejos
09 de Octubre del 2005
Rastrear un archivo en un disco requiere una rutina, que por cada carpeta que encuentre, explore las subcarpetas, idem si en las subcarpetas hay más carpetas. Esto requiere de una rutina recursiva (que se llame a si misma).
No podrás valerte de la función Dir$, ya que esta es global y no funciona en la recursividad, de modo entonces que deberás valerte de funciones API para este propósito.

Las declaraciones que vas a necesitar son :

Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Public Const MAX_PATH = 260
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 * MAX_PATH
cAlternate As String * 14
End Type
Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long

El uso de esto es algo parecido a lo que viene

Dim Archivo as String
Dim WS as WIN32_FIND_DATA
Dim Puntero as Long

Puntero = FindFirstFile("C:\*.*",WS)
Do While Puntero > 0
if WS.dwFileAttributes = 16 Then
<Es una carpeta, la rutina se llama a si misma>
< sumando el nombre de la carpeta a la ruta inicial>
End if
Archivo = WS.cFileName
if Archivo = <Archivo buscado> Then
<Lo encontró, haces lo que debas hacer
end if
Puntero = FindNextFile(Puntero, WS)
Loop

Del archivo te retornará solo el nombre, la ruta completa se forma con la ruta inicial de búsqueda.
Yo tenía la rutina, pero la he perdido en la rotura de un disco duro, pero, era algo parecido a lo que te puse, seguramente deberás retocarla un poco

Espero que te sirva

Saludos