OVH Cloud OVH Cloud

lister des fichiers recursivement

1 réponse
Avatar
Rahan
bonjour a tous

j utilise le Filesystemobject pour recuper la liste des fichiers
recursivement pour afficher le nom,rep,date de creation
the pb est que c very lent !

y a t il un moyen plus rapide ? dir ?....

merci d vance

1 réponse

Avatar
michdenis
Bonjour Rahan,

Il y a aussi ceci de Laurent Longre.

Est-ce beaucoup plus rapide. Tu devras adapter pour obtenir les attribute de tes fichiers.

'--------------------------------
'Attention à bien mettre un antislash à la fin du le nom du répertoire
'dans l'appel de Recurse.
'Laurent Longre, mpfe
'========================================================
Option Compare Text

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 * 260
cAlternate As String * 14
End Type

Private Declare Function FindFirstFileA Lib "Kernel32" _
(ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long

Private Declare Function FindNextFileA Lib "Kernel32" _
(ByVal hFindfile As Long, lpFindFileData As WIN32_FIND_DATA) As Long

Private Declare Function FindClose Lib "Kernel32" _
(ByVal hFindfile As Long) As Long

Const Masque = "*.exe"

Dim Arr() As String
Dim NbFichiers As Long
Dim FileFindData As WIN32_FIND_DATA
Dim Fichier As String

Sub Test()
ReDim Arr(1 To 1)
NbFichiers = 0
Recurse "D:"
Application.ScreenUpdating = False
With Range("A1").Resize(NbFichiers)
.Value = Application.Transpose(Arr)
.Sort [A1]
.EntireColumn.AutoFit
End With
End Sub

Private Sub Recurse(ByVal Chemin As String)
Dim hFindfile As Long
hFindfile = FindFirstFileA(Chemin & "*.*", FileFindData)
If Chemin <> "D:" Then
FindNextFileA hFindfile, FileFindData
If FindNextFileA(hFindfile, FileFindData) = 0 Then
FindClose hFindfile
Exit Sub
End If
End If
Do
Fichier = Chemin & Left$(FileFindData.cFileName, _
InStr(1, FileFindData.cFileName, vbNullChar) - 1)
If GetAttr(Fichier) And vbDirectory Then
Recurse Fichier & ""
ElseIf Fichier Like Masque Then
NbFichiers = NbFichiers + 1
ReDim Preserve Arr(1 To NbFichiers)
Arr(NbFichiers) = Fichier
End If
Loop While FindNextFileA(hFindfile, FileFindData)
FindClose hFindfile
End Sub
'--------------------------------


Salutations!




"Rahan" a écrit dans le message de news:
bonjour a tous

j utilise le Filesystemobject pour recuper la liste des fichiers
recursivement pour afficher le nom,rep,date de creation
the pb est que c very lent !

y a t il un moyen plus rapide ? dir ?....

merci d vance