~ Edito ~
12/03/2006 @ 13:39
Depuis la dernière mise à jour (qui remonte à... oulala plusieurs mois), un petit ménage de printemps s'impose. Ca tombe bien, c'est presque la période. Au menu, et progressivement sur les jours à venir, rafraîchissement de plusieurs fonctions et procédures, nouvelles APIs et nouveaux programmes.
~ Rechercher ~
~ Annuaire VB ~
~ Partenaires ~
|
Fonction FindNextFile
Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" ( _ ByVal hFindFile As Long, _
lpFindFileData As WIN32_FIND_DATA) As Long
Versions : . Windows 95/98 : Oui . Windows NT : A partir de 3.1 . Windows 2000/XP : OuiDescription : Cette fonction ne peut pas être utilisée sans avoir au préalable lancé la fonction FindFirstFile. Elle est mise en générale dans une boucle qui permet ainsi de parcourir tous les fichiers associés au filtre défini dans la fonction FindFirstFile. La valeur du paramêtre hFindFile est le handle de recherche qui aura été fourni par la fonction ayant initialisé la recherche. De la même manière que la précédente, celle-ci récupère les informations concernant le fichier dans une structure WIN32_FIND_DATA.
Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type 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
Constante | Valeur |
Définition |
MAX_PATH | 260 |
Longueur maximale d'un nom de fichier |
Exemple d'utilisation :
Option Explicit
'----------------------------------------
'------Déclarations propres aux API------
'----------------------------------------
'---Les constantes---
Private Const MAX_PATH = 260
Private Const INVALID_HANDLE_VALUE = -1
Private Const FILE_ATTRIBUTE_READONLY = &H1
Private Const FILE_ATTRIBUTE_HIDDEN = &H2
Private Const FILE_ATTRIBUTE_SYSTEM = &H4
Private Const FILE_ATTRIBUTE_DIRECTORY = &H10
Private Const FILE_ATTRIBUTE_ARCHIVE = &H20
Private Const FILE_ATTRIBUTE_NORMAL = &H80
Private Const FILE_ATTRIBUTE_TEMPORARY = &H100
Private Const FILE_ATTRIBUTE_COMPRESSED = &H800
'---Les API---
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 FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
'---Les types---
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 * MAX_PATH
cAlternate As String * 14
End Type
'----------------------------------------------
'------Déclarations propres à la fonction------
'----------------------------------------------
Private Type ListeFichier
Fichiers() As WIN32_FIND_DATA
Chemin() As String * MAX_PATH
Nombre As Long
End Type
Private Sub Form_click()
' Alogtihme récursif
'---Déclaration des variables---
Dim ResultatRecherche As ListeFichier
Dim NombreOccurence As Long
Dim i
'---Recherche de tous les fichiers *.frm sur le lecteur D:\---
NombreOccurence = Rechercher("D:\", "*.frm", ResultatRecherche)
' Toutes les informations de la recherche sont dans la variables ResultatRecherche
MsgBox NombreOccurence & " ont été trouvées (ou a été trouvé)" & Chr(13) & _
"Le premier fichier trouvé est : " & Trim$(ResultatRecherche.Chemin(1)) & _
Trim$(ResultatRecherche.Fichiers(1).cFileName)
End Sub
'--------------------------------------------------------
'---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 ---
'--------------------------------------------------------
Private 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---
hFindFile = FindFirstFile(Chemin & FichierR, lpFindFileData)
If hFindFile <> INVALID_HANDLE_VALUE Then
Do
' Mémorise
ResultatRecherche.Nombre = ResultatRecherche.Nombre + 1
ReDim Preserve ResultatRecherche.Chemin(1 To ResultatRecherche.Nombre)
ReDim Preserve ResultatRecherche.Fichiers(1 To ResultatRecherche.Nombre)
ResultatRecherche.Chemin(ResultatRecherche.Nombre) = Chemin
ResultatRecherche.Fichiers(ResultatRecherche.Nombre) = lpFindFileData
' Initialise lpFindFileData (Variable texte uniquement)
lpFindFileData.cAlternate = String$(14, 0)
lpFindFileData.cFileName = String$(MAX_PATH, 0)
Loop Until FindNextFile(hFindFile, lpFindFileData) = 0
End If
FindClose hFindFile
'---Recherche dans les sous-répertoires---
hFindFile = FindFirstFile(Chemin & "*.*", lpFindFileData)
If (hFindFile <> INVALID_HANDLE_VALUE) Then
Do
' Si c'est un répertoire on continu le recherche
If (lpFindFileData.dwFileAttributes And _
FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY Then
' Extraction du nom du répertoire
CheminRep = Mid$(lpFindFileData.cFileName, 1, _
InStr(1, lpFindFileData.cFileName, Chr$(0)) - 1)
' Attention dans les sous-répertoire aux
' répertoires . et .. (Retour répertoire parent)
If (CheminRep <> ".") And (CheminRep <> "..") Then
CheminRep = Chemin & CheminRep & "\"
Rechercher = Rechercher(CheminRep, FichierR, ResultatRecherche)
End If
End If
Loop Until FindNextFile(hFindFile, lpFindFileData) = 0
End If
FindClose hFindFile
'---Retourne le nombre d'occurrences trouvées---
Rechercher = ResultatRecherche.Nombre
End Function
Retour à la liste des API |