begin process at 2012 02 16 11:59:37
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > RECHERCHER DES FICHIERS

RECHERCHER DES FICHIERS


 Information sur la source

Note :
9,5 / 10 - par 2 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :API Niveau :Débutant Date de création :18/04/2003 Date de mise à jour :18/04/2003 14:01:04 Vu :4 561

Auteur : MadHellRaiSer

Ecrire un message privé
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

 Description

Ce petit bout de code permet une recherche de fichier de recurcive en utilisant les API.
Vous y trouverai l'utilisation des fonctions suivantes :
      - FindFirstFile
      - FindNextFile
      - FindClose

Source

  • Option Explicit
  • 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
  • Private Const INVALID_HANDLE_VALUE = -1
  • Private Const MAX_PATH = 260
  • 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
  • '---------------------------------------------------------------------------------------'
  • ' Recherche de fichiers '
  • '---------------------------------------------------------------------------------------'
  • ' '
  • ' Path : chemin de départ de la recherche '
  • ' fichier : nom du fichier a rechercher '
  • ' tabfic() : tableau de retour des fichiers trouvés (avec leur chemin) '
  • '---------------------------------------------------------------------------------------'
  • Public Sub FindFile(path As String, fichier As String, tabfic() As String)
  • Dim chemin As String
  • Dim fic As String
  • Dim hfind As Long
  • Dim hfind2 As Long
  • Dim struct As WIN32_FIND_DATA
  • chemin = path
  • hfind = FindFirstFile(chemin & "*.*" & Chr(0), struct)
  • hfind2 = hfind
  • Do Until hfind2 = 0
  • If Left(struct.cFileName, 1) <> "." Then
  • fic = chemin & Left(struct.cFileName, InStr(struct.cFileName, Chr(0)) - 1)
  • Debug.Print fic
  • If struct.dwFileAttributes And vbDirectory Then FindFile fic & "\", fichier, tabfic
  • If Right(fic, Len(fichier)) = fichier Then
  • ReDim Preserve tabfic(UBound(tabfic) + 1)
  • tabfic(UBound(tabfic)) = fic
  • tabfic(0) = UBound(tabfic)
  • End If
  • End If
  • hfind2 = FindNextFile(hfind, struct)
  • Loop
  • FindClose hfind
  • End Sub
Option Explicit

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

Private Const INVALID_HANDLE_VALUE = -1
Private Const MAX_PATH = 260

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


'---------------------------------------------------------------------------------------'
'			Recherche de fichiers						'
'---------------------------------------------------------------------------------------'
'											'
' Path : chemin de départ de la recherche						'
' fichier : nom du fichier a rechercher							'
' tabfic() : tableau de retour des fichiers trouvés (avec leur chemin)			'
'---------------------------------------------------------------------------------------'

Public Sub FindFile(path As String, fichier As String, tabfic() As String)
    Dim chemin As String
    Dim fic As String
    Dim hfind As Long
    Dim hfind2 As Long
    Dim struct As WIN32_FIND_DATA
    
    chemin = path
    hfind = FindFirstFile(chemin & "*.*" & Chr(0), struct)
    hfind2 = hfind
    Do Until hfind2 = 0
        If Left(struct.cFileName, 1) <> "." Then
            fic = chemin & Left(struct.cFileName, InStr(struct.cFileName, Chr(0)) - 1)
            Debug.Print fic
            If struct.dwFileAttributes And vbDirectory Then FindFile fic & "\", fichier, tabfic
            If Right(fic, Len(fichier)) = fichier Then
                ReDim Preserve tabfic(UBound(tabfic) + 1)
                tabfic(UBound(tabfic)) = fic
                tabfic(0) = UBound(tabfic)
            End If
        End If
        hfind2 = FindNextFile(hfind, struct)
    Loop
    FindClose hfind
End Sub

 Conclusion

Si vous trouvez des bugs ou des ameliorations a apporter, signalez les moi svp; ce source n'en sera que meilleur


 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) .NET DEPENDENCY VIEWER : ARBRE DES DÉPENDANCES D'UN ASSEMBLY... par ShareVB
Source avec Zip Source .NET (Dotnet) UTILITAIRE SKYDRIVE par MasterShadows
Source avec Zip ROTATION RAPIDE D'IMAGE par trex70
Source avec Zip Source avec une capture ENUMERATION DES PORTS TCP ET IDENTIFCATION DU PROCESS (PID) ... par Renfield
Source avec Zip Source avec une capture MOUSE SPEED AND WEIGHT : RETOUR DE FORCE VIRTUEL ! par ScSami

Commentaires et avis

Commentaire de PROGRAMMIX le 18/04/2003 14:31:40

Je ne voudrais pas être désagréable mais malheureusement pour toi, il y a déjà pas mal de sources traitant de la recherche récursive des fichiers via les API.

De plus, je trouve que tu n'as pas assez commenté ton code afin de faire comprendre comment fonctionne le tout et surtout comment faire pour, par exemple, ne conserver que certains fichiers et pas d'autres.
L'intérêt d'une recherche de fichiers étant généralement de sélectionner des fichiers répondant à certains critères.

Commentaire de lca94 le 01/10/2003 13:21:56

commentaire d'en haut: ben t'utilise les ? et * du dos pour dire par ex auto*.bat tous les "automachin.bat" dans le nom de fichier

commentaire du prog: joli mais manque un truc ... tu testes comment quand tu trouves aucun fichiers? moi ça donne une erreur mon tabfic reste totalement vide ...donc pour faire simple
j'aiajouté avant ta boucle et juste après les dim

redim tabfic(1)
tabfic(0)=0 'indice 0 donnant dans ton prog le nb de fichier retenus :)


du coup si rien n'est trouvé je fait "if tanbfic(0) then"

vla (j'ai créé un fichier existfile() en fait qui rend cette option au dessu inutile et n'apelle que le findfirst :) (le tout pour utiliser cette dernière dans excel qui m'emmerde avec les findfile et autres intégrés au logiciel ... le vba c pas génianl des fois .. faut réinstaller Excel pour avoir ci et ça... alors je kernel32 et ya pu a installer)

ci dessous la fonction qui m'a bien aidé à partir des infos que tu m'a donné avec ton prog ... yen a surement d'autres mais c cuila que j'ai trouvé : bien sur fo mettre les truc de Declare avant :)

Public Function ExistFile(chemin As String, fichier As String) As Boolean
Dim tabfic() As String
    Dim hfind As Long
    Dim struct As WIN32_FIND_DATA
    
    hfind = FindFirstFile(chemin & fichier & Chr(0), struct)
    ExistFile = (hfind &lt;&gt; -1)
End Function

Commentaire de shayane le 07/10/2004 16:39:36

Bein comment qu'on fait si on veut étendre la recherche dans les sous dossiers ........

Commentaire de PROGRAMMIX le 07/10/2004 17:46:29

Pour les sous-dossiers, on fait une rechercher récursive.

Voir, par exemple, ma source "3 MÉTHODES DE RECHERCHE RÉCURSIVE DE FICHIERS" :
http://www.vbfrance.com/code.aspx?id=5089.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,076 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales