Hit-Parade .VB Research Center . Compteur
Accueil ~  Code ~  Programmes ~  Api ~  Forum ~  Cours ~  Livres ~  Quiz ~  Annuaire
~ 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 ~
 Rechercher un site :
  

~ Partenaires ~

Fonction FindFirstFile

Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" ( _
                 
ByVal lpFileName As String, _
                 lpFindFileData As WIN32_FIND_DATA) As Long
Versions :
. Windows 95/98 : Oui
. Windows NT : A partir de 3.1
. Windows 2000/XP : Oui

Description :
Cette fonction permet de parcourir un répertoire pour retrouver un ou plusieurs fichiers. lpFileName doit contenir le chemin du répertoire ainsi que le filtre de fichier à appliquer (*.txt pour des fichiers texte ou *.* pour récupérer tous les fichiers). La valeur retournée par la fonction est un handle de recherche qui vous permet de parcourir les fichiers suivants faisant partie du filtre. Il sera utilisé en paramêtre de la fonction FindNextFile (pour avancer de fichier en fichier) et FindClose (pour arrêter la recherche). Si le résultat est zéro, la fonction a échoué.
Le résultat de la recherche de FindFirstFile est renvoyé dans une structure WIN32_FIND_DATA pour le premier fichier trouvé.

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


ConstanteValeur Définition
MAX_PATH260 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

Visual Basic Research Center - (c) 2000/2002 -  Webmaster : docvb (chez) free (point) fr