SpikeL Comunidad
Hola, bienvenido a SpikeL Foro.

Si eres nuevo, deves registrarte.

Si ya tienes una cuenta, deves ingresar.

¡Muchas gracias!

PD: Si te has registrado pero no puedes logear tienes que activar tu cuenta desde tu e-mail.


Unirse al foro, es rápido y fácil

SpikeL Comunidad
Hola, bienvenido a SpikeL Foro.

Si eres nuevo, deves registrarte.

Si ya tienes una cuenta, deves ingresar.

¡Muchas gracias!

PD: Si te has registrado pero no puedes logear tienes que activar tu cuenta desde tu e-mail.
SpikeL Comunidad
¿Quieres reaccionar a este mensaje? Regístrate en el foro con unos pocos clics o inicia sesión para continuar.

Búsqueda de archivos usando el Api FindFirstFile y FindNextF

Ir abajo

[ APORTE ] BIEN Búsqueda de archivos usando el Api FindFirstFile y FindNextF

Mensaje por Francohhh Mar Dic 28, 2010 11:16 pm

Este ejemplo muestra como buscar un archivo o directorio pero recorriendo todos sus subdirectorios internos, por ejemplo si ponemos buscar *.* en la unidad "c:" no va a buscar solo en esta unidad, si no que lo va a hacer en toda la partición c:.

Este ejemplo similar , lo que hace es exactamente lo mismo que hace la función Dir del Visual basic , pero de forma mas veloz, claro que esto se nota cuando los archivos son numerosos, pero en comparación con el otro ejemplo vuelvo a aclarar, este ejemplo solo lista los ficheros del directorio seleccionado sin incluir los subdirectorios.

Controles para el form

* Colocar un Drive1
* un Dir1
* un List1
* un Command1 de esta forma:

Búsqueda de archivos usando el Api FindFirstFile y FindNextF Buscar_archivos_directorios_api

Código:
'Declaración de las funciones Api para buscar archivos en el sistema
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'Api FindFirstFile (Busca el primer archivo)
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 GetFileAttributes _
    Lib "kernel32" _
    Alias "GetFileAttributesA" ( _
        ByVal lpFileName As String) As Long

Private Declare Function FindClose _
    Lib "kernel32" ( _
        ByVal hFindFile As Long) As Long

'Constantes para la búsqueda que utiliza las funciones Api anteriores
Const MAX_PATH = 260
Const MAXDWORD = &HFFFF
Const INVALID_HANDLE_VALUE = -1
Const FILE_ATTRIBUTE_ARCHIVE = &H20
Const FILE_ATTRIBUTE_DIRECTORY = &H10
Const FILE_ATTRIBUTE_HIDDEN = &H2
Const FILE_ATTRIBUTE_NORMAL = &H80
Const FILE_ATTRIBUTE_READONLY = &H1
Const FILE_ATTRIBUTE_SYSTEM = &H4
Const FILE_ATTRIBUTE_TEMPORARY = &H100
'Estructura que utiliza la estructura WIN32_FIND_DATA
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 * MAX_PATH
    cAlternate As String * 14
End Type

''''''''''''''''''''''''''''''''''''''''''''''''''''''

'Función que elimina los caracteres nulos en los path devueltos
Private Function EliminarNull(OriginalStr As String) As String
    If (InStr(OriginalStr, Chr(0)) > 0) Then
        OriginalStr = Left(OriginalStr, _
                          InStr(OriginalStr, Chr(0)) - 1)
    End If
    EliminarNull = OriginalStr
End Function

'Función que busca y lista los ficheros

Private Sub Buscar(path As String)

    Dim FileName As String ' nombre de Archivos
    Dim DirName As String ' Subdirectorios
   
   
    Dim hSearch As Long ' Handle de busqueda
    Dim WFD As WIN32_FIND_DATA
    Dim Cont As Integer
    'si no tiene la barra separadora de path se la ponemos
    If Right(path, 1) <> "" Then path = path & ""
        'Esta variable es para saber cuando buscamos
        'con el Api si hay un archivo, si en el bucle ya
        'no encuentra mas, la Api devuelve un 0
        Cont = True
        'Buscamos el primer archivo o directorio del Path
        hSearch = FindFirstFile(path & "*", WFD)
        'Si no hay nada el handle de busqueda vale -1
        If hSearch <> INVALID_HANDLE_VALUE Then
            'Mientras Cont valga 1 seguirá buscando ya que hay archivos o directorios
            Do While Cont
                DirName = EliminarNull(WFD.cFileName)
                ' ignoramos los "." y ".."
                If (DirName <> ".") And (DirName <> "..") Then
                    ' Si es un directorio
                    If GetFileAttributes(path & DirName) And FILE_ATTRIBUTE_DIRECTORY Then
                        List1.AddItem DirName
                        'Si no es un archivo
                    Else
                        List1.AddItem DirName
                    End If
                End If
                'Siguiente archivo o directorio
                Cont = FindNextFile(hSearch, WFD) 'Get next subdirectory.
            Loop
            'Cerramos el handle de búsqueda
            Cont = FindClose(hSearch)
    End If
   
End Sub
Private Sub Command1_Click()
    'Borramos el contenido del List por si tenia items
    List1.Clear
    'Buscamos pasandole el path del control Dir1
    Buscar Dir1
End Sub

Private Sub Drive1_Change()
    Dir1 = Drive1
End Sub

Ya con este código tienen el programa que ver en la imagen. cheers
Francohhh
Francohhh
Administrador
Administrador

Administrador
Medallas
Búsqueda de archivos usando el Api FindFirstFile y FindNextF Prensa1Búsqueda de archivos usando el Api FindFirstFile y FindNextF Fundador1Búsqueda de archivos usando el Api FindFirstFile y FindNextF Participativo1Búsqueda de archivos usando el Api FindFirstFile y FindNextF Donar1
Búsqueda de archivos usando el Api FindFirstFile y FindNextF Staff1x Búsqueda de archivos usando el Api FindFirstFile y FindNextF Moderador1 Búsqueda de archivos usando el Api FindFirstFile y FindNextF Ao1 Búsqueda de archivos usando el Api FindFirstFile y FindNextF Desarrollo
Búsqueda de archivos usando el Api FindFirstFile y FindNextF Radio10 Búsqueda de archivos usando el Api FindFirstFile y FindNextF Radio110 Búsqueda de archivos usando el Api FindFirstFile y FindNextF Colabo10 Búsqueda de archivos usando el Api FindFirstFile y FindNextF Progra10
Búsqueda de archivos usando el Api FindFirstFile y FindNextF Cs110Búsqueda de archivos usando el Api FindFirstFile y FindNextF Postea10 Búsqueda de archivos usando el Api FindFirstFile y FindNextF Senor_10 Búsqueda de archivos usando el Api FindFirstFile y FindNextF Dueno_10
Búsqueda de archivos usando el Api FindFirstFile y FindNextF Futbol10

Mensajes Mensajes : 880
Puntos Puntos : 53096
Reputación Reputación : 41
Sexo Sexo : Masculino

Fecha de inscripción Fecha de inscripción : 23/03/2010
Edad Edad : 27
Localización Localización : Mar del Plata

http://www.spikel.org

Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.