Parcours de fichier d'un répertoire

0/5 (3 avis)

Snippet vu 6 350 fois - Téléchargée 40 fois

Contenu du snippet

Ceci étais destiné à parcourir un rep donné à la recherche de fichier log..
Je crois que vous saurez vous débrouiller..

PS: Je n'ai mis que les déclaratons nécessaires...

Source / Exemple :


'Permet de trouver le premier fichier d'un répertoire
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long

'Permet de trouver le fichier suivant dans un répertoire
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long

'Définit la grandeur maximale pour un chemin d'accès
Private Const MAX_PATH = 260

'Définit la date de création d'un fichier
Private Type FILETIME
        dwLowDateTime As Long
        dwHighDateTime As Long
End Type

'Contient les informations relatives à un fichier
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

Dim Rep As Long
Dim Data As WIN32_FIND_DATA

Private sub Parcours

    'Permet de trouver le premier fichier du répertoire
    Rep = FindFirstFile(strPath_Log & "*.*", Data)

    intNbr_Fich_Log = 0
    
    'Boucle qui parcourt tous les fichiers d'un répertoire
    While FindNextFile(Rep, Data)
        DoEvents
        intPosTemp = InStr(1, Data.cFileName, ".", vbTextCompare)
        strRep = Trim(Right(Data.cFileName, Len(Data.cFileName) - intPosTemp))
        strRep = Left(strRep, 3)
        
        'Vérifie si le fichier est un fichier log
        If LCase(strRep) = "log" Then
            ReDim Preserve Logs(UBound(Logs) + 1)
            Logs(UBound(Logs) - 1) = Data.cFileName
            intNbr_Fich_Log = intNbr_Fich_Log + 1
        End If
    Wend

end sub

A voir également

Ajouter un commentaire

Commentaires

cs_PaTaTe
Messages postés
1878
Date d'inscription
mercredi 21 août 2002
Statut
Contributeur
Dernière intervention
7 janvier 2019
-
tu oublie :

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

FindClose Rep

apres ta bloucle

Ca evitera les fuites de mémoire.
cs_heine
Messages postés
58
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
15 novembre 2006
-
voila zmat à bien compris... pour un code ausi simple, il suffit de commenter un peu, et de mettre direct la source visible ;)

Merci à toi Zmat ;)
cs_zmat
Messages postés
13
Date d'inscription
lundi 26 novembre 2001
Statut
Membre
Dernière intervention
29 octobre 2002
-
Salut toi

Essai ça

'Renvoi la liste de fichier d'un repertoire (sans API)

'Path = Repertoire de recherche
'Destination = Référence d'un contrôle ListBox
'Extension = Extension du type de fichier à chercher

Public Sub DirFileList(Path As String, Destination As ListBox, Optional Extension = "*.*")
Dim FileName As String 'Nom d'un fichier d'un repertoire

On Error GoTo ErrHandler 'Active le gestionnaire d'erreurs

'Supprime le "" à la fin de Path
If Right(Path, 1) "" Then Path Mid(Path, 1, Len(Path) - 1)

'Renvoi le premier fichier du repertoire
FileName = Dir(Path & "" & Extension)

'Efface la zone de liste qui contiendra la liste de répertoire
Destination.Clear

'Recherche et ajout des fichiers trouvé à la liste
While FileName <> ""
Destination.AddItem FileName
FileName = Dir 'Renvoi le prochain fichier du même repertoire
DoEvents
Wend

'C terminé, on sort
Exit Sub

ErrHandler:
MsgBox Err.Description, vbCritical, "Erreur " & Err.Number
End Sub


'Exemple d'utilisation :
'Pour renvoyer la liste complète de fichiers sur le "C:"
DirListFile "C:", List1

'Pour renvoyer les fichiers .Log sur "C:"
DirListFile "C:", List1, "*.log"

'Donne m'en des nouvelles ... ;-)

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.