Lister les fichiers d'un répertoire et de ses sous-répertoires dans un listbox


Description

voilà ce source est une réponse à un message posté sur le forum.....il est vrai que cela peut etre utile d'une façon ou d'un à beaucoup d'entre nous donc voilà le principe en utilisant la réccurcivité.....je me doute que ce type de source existe déjà mais bon...si quelqu'un ne l'a pas trouvé, pourquoi ne pas le reposter....et puis plus on a d'exemples plus on a de choix LOL

Source / Exemple :


'utilisation des API FindFirstFile , FindNextFile etc........en récurcif.....

'--------------------------------------------------------
'---La fonction Rechercher : ---
'--- Cette fonction recherche tous les fichiers dans ---
'--- le répertoire spécifié et ses sous-repertoires ---
'--- Elle retourne le nombre d'occurences trouvées ---
'--------------------------------------------------------
Public Function Rechercher(Chemin As String, FichierR As String, ResultatRecherche As ListeFichier) As Long

    '---Déclaration des variables---
    Dim lpFindFileData As WIN32_FIND_DATA
    Dim hFindFile As Long
    Dim lgRep As Long
    Dim CheminRep As String
    
    '---Recherche tous les fichiers demandés dans le répertoire Chemin---
    lpFindFileData.dwFileAttributes = &H10
    
    Dim FicTmp As String
    '---récupération du premier fichier du répertoire
    hFindFile = FindFirstFile(Chemin & FichierR, lpFindFileData)
    
    If hFindFile <> INVALID_HANDLE_VALUE Then
        Do
            '---on récupère le nom du fichier
            FicTmp = Mid$(lpFindFileData.cFileName, 1, InStr(lpFindFileData.cFileName, Chr$(0)) - 1)
            
            If FicTmp <> ".." And FicTmp <> "." And (lpFindFileData.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) = 0 Then
                '---si on tombe sur un fichier , on mémorise le nom du du fichier dans un tableau
                '---ainsi que le répertoire ou il se situe
                ResultatRecherche.Nombre = ResultatRecherche.Nombre + 1 '---un fichier ajouté
                ReDim Preserve ResultatRecherche.Chemin(1 To ResultatRecherche.Nombre)
                ReDim Preserve ResultatRecherche.Fichiers(1 To ResultatRecherche.Nombre)
                ResultatRecherche.Chemin(ResultatRecherche.Nombre) = Chemin '---chemin du fichier
                ResultatRecherche.Fichiers(ResultatRecherche.Nombre) = lpFindFileData '---nom du fichier
                ' Initialise lpFindFileData (Variable texte uniquement)
                lpFindFileData.cAlternate = String$(14, 0) '---on remet à blanc
                lpFindFileData.cFileName = String$(MAX_PATH, 0) '---on remet à blanc
            End If
        Loop Until FindNextFile(hFindFile, lpFindFileData) = 0 'on récupère le prochain fichier
    End If
    '---on arrète de scrutter le répertoire en court
    FindClose hFindFile
    
    '---Recherche dans les sous-répertoires---
    
    hFindFile = FindFirstFile(Chemin & "*.*", lpFindFileData)
    If (hFindFile <> INVALID_HANDLE_VALUE) Then
        Do
            '---on cherche un sous-répertoire
            If (lpFindFileData.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY Then
                '---un sous-répertoire a été trouvé
                '---on récupère le nom du sous répertoire
                CheminRep = Mid$(lpFindFileData.cFileName, 1, InStr(1, lpFindFileData.cFileName, Chr$(0)) - 1)
                '---attention il ne faut pas prendre en compte les valeurs "." et ".."
                '---considérées comme des répertoires mais qui ne nous intéressent pas
                If (CheminRep <> ".") And (CheminRep <> "..") Then
                    CheminRep = Chemin & CheminRep & "\"
                    '---on relance la fonction Rechercher pour récupérer les fichiers du sous répertoire
                    '---voici la récurcivité!!!!
                    '---on va alors récupérer tous les fichiers du sous répertoire mais on va alors rechercher
                    '---si dans ce sous répertoire il y a d'autres sous répertoires etc...
                    Rechercher = Rechercher(CheminRep, FichierR, ResultatRecherche)
                    'on récupère la main après avoir vérifier le contenu du sous répertoire
                End If
            End If
            '---et on continue pour tester un éventuel autre sous-répertoire
        Loop Until FindNextFile(hFindFile, lpFindFileData) = 0
    End If
    '---voilà on a vérifier tous les sous-répertoires
    FindClose hFindFile
    
    '---on retourne le nombre de fichiers trouvées
    Rechercher = ResultatRecherche.Nombre
End Function

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.