COMMENT LISTER LES FICHIERS D'UN DISQUE DUR (OU AUTRE ...)

H@lloWin___HiA - 4 avril 2001 à 14:03
mangoust Messages postés 7 Date d'inscription lundi 18 mars 2002 Statut Membre Dernière intervention 9 juillet 2003 - 16 mai 2002 à 16:07
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/837-comment-lister-les-fichiers-d-un-disque-dur-ou-autre

mangoust Messages postés 7 Date d'inscription lundi 18 mars 2002 Statut Membre Dernière intervention 9 juillet 2003
16 mai 2002 à 16:07
Pour ma part j'ai amélioré ce source (qui est très bien par ailleurs) pour répondre à mes attentes et je vous joint ma modif qui permet de filtrer le type de fichiers cherchés et de rediriger la liste vers un fichier ou un tableau...
mangoust Messages postés 7 Date d'inscription lundi 18 mars 2002 Statut Membre Dernière intervention 9 juillet 2003
16 mai 2002 à 16:06
Pour ma part j'ai amélioré ce source (qui est très bien par ailleurs) pour répondre à mes attentes et je vous joint ma modif :

Public Sub SCANNER_LE_DISQUE(ByVal LE_REP_DE_DEPART As String, _
ByVal LA_REDIRECTION As eREDIRECTION, _
Optional ByVal LES_MASQUES As String = "*.*", _
Optional ByRef LE_TABL_DE_SORTIE As Variant, _
Optional ByVal LE_NO_DE_FICHIER As Long = 1)

On Error Resume Next 'Obligatoire pour ne pas être emmerdé par les fichier ssytèmes (jusqu'à autre solution...)

Dim I, N As Long
Dim LE_COMPTEUR As Long
Dim LE_NOM_FICHIER As String
Dim LE_TABL_DE_REP_FILS() As String
Dim LE_TABL_DE_MASQUES() As String

LE_COMPTEUR = 0
LE_TABL_DE_MASQUES = Split(LES_MASQUES, ";")

For I = LBound(LE_TABL_DE_MASQUES) To UBound(LE_TABL_DE_MASQUES)
'Sauve tous les noms de fichiers du répertoire en cours de traitement qui correspondent au Masque.
'FileName$ = Dir(CurrentPath & Mask)
LE_NOM_FICHIER = Dir(LE_REP_DE_DEPART & LE_TABL_DE_MASQUES(I))

Do While LE_NOM_FICHIER <> ""
LE_COMPTEUR = LE_COMPTEUR + 1
If (LE_COMPTEUR Mod 10) = 0 Then
DoEvents
End If

Select Case LA_REDIRECTION
Case eREDIRECT_FICHIER: Print #LE_NO_DE_FICHIER, LE_REP_DE_DEPART & LE_NOM_FICHIER
Case eREDIRECT_TABLEAU:
ReDim Preserve LE_TABL_DE_SORTIE(1 To 2, UBound(LE_TABL_DE_SORTIE, 2) + 1) As String

LE_TABL_DE_SORTIE(1, UBound(LE_TABL_DE_SORTIE, 2)) = LE_REP_DE_DEPART
LE_TABL_DE_SORTIE(2, UBound(LE_TABL_DE_SORTIE, 2)) = LE_NOM_FICHIER
End Select

LE_NOM_FICHIER = Dir 'Fichier Suivant
Loop
Next I

'Cherche ts les répertoires "fils"
LE_NOM_FICHIER = Dir(LE_REP_DE_DEPART, vbDirectory)

Do While LE_NOM_FICHIER <> ""
LE_COMPTEUR = LE_COMPTEUR + 1
If (LE_COMPTEUR Mod 10) = 10 Then
DoEvents
End If

If LE_NOM_FICHIER <> "." And LE_NOM_FICHIER <> ".." Then
'On regarde si le fichier est un répertoire. Si tel est le cas, on mémorise son nom
'afin de scruter les sous répertoire de celui-ci par la suite...
If (GetAttr(LE_REP_DE_DEPART & LE_NOM_FICHIER) And vbDirectory) = vbDirectory Then 'ATTENTION : Les fic systèmes nous foutent en erreur !
N = N + 1
ReDim Preserve LE_TABL_DE_REP_FILS(N) As String
'Mémorise le nom du répertoire
LE_TABL_DE_REP_FILS(N) = LE_REP_DE_DEPART & LE_NOM_FICHIER
End If
End If

LE_NOM_FICHIER Dir 'Fichier suivant dans la liste extraite par LE_NOM_FICHIER Dir(CurrentPath, vbDirectory)
Loop

'Recense ts les fichiers des répertoires mémorisés => Va nous donner : 1. Une liste de fichiers
' 2. Une autre liste de sous-répertoire (éventuellement)
For I = 1 To N
SCANNER_LE_DISQUE LE_TABL_DE_REP_FILS(I) & "", LA_REDIRECTION, LES_MASQUES, LE_TABL_DE_SORTIE, LE_NO_DE_FICHIER
Next I
End Sub

Private Sub Form_Load()
Dim A() As String
Dim J

'Open "d:Files.txt" For Output As #1

ReDim A(1 To 2, 0) As String 'A faire avant d'appeler SCANNER_LE_DISQUE sous peine d'erreur !
SCANNER_LE_DISQUE "Q:", eREDIRECT_TABLEAU, "*.zip;*.exe;*.doc;*.pdf", A, 1

For J = LBound(A, 2) + 1 To UBound(A, 2)
Debug.Print A(1, J) & A(2, J)
Next J

'Close #1

Unload Me
End Sub
Benj1105 Messages postés 103 Date d'inscription samedi 23 mars 2002 Statut Membre Dernière intervention 2 mars 2004
23 mars 2002 à 21:43
C est dans cette ligne je pense:
If FileName$ <> "." And FileName$ << ".." Then

tu rajoute la condition and les trois derniers caracteres sont .txt (je l ai mis en francais mais c est pas compliqué à convertir)
J'aurai voulu repertorier seulement un certain type de fichier.
ex: *toto*.titi
comment on repertorie ke un certain type de ficgier (par exemple ke les dll ou ke les mp3)
J'ai eu un blème avec ton code à l'execution, il plantait sur getattr (NT4 sp6 ???). La solution :
If GetAttr(CurrentPath$ & FileName$) and vbDirectory
remplacé par :
If (GetAttr(CurrentPath$ & FileName$) and vbDirectory)=vbdirectory
et en plus, j'ai mis au debut de recursetree un on error resume next, qui l'empeche de planter sur les fichiers systeme
J'ai pas tout compris pourquoi ca voulait pas marcher, mais comme maintenant ca va...
PS : doit y avoir un truc dans le systeme windows pour recuperer l'arbo via une api quelconque, ca devrait être plus... souple. Qui a une idée ? ( a mon avis, ca doit trainer dans system32...)
Pour lister les disques tu peux utiliser le controle drivelistbox il gere tout seul les disques et te donne le disque actuellement selectionne par une propriete du controle.
Ici-même :-)))
Titre : LISTER LES DISQUES (CD, HD, FD, RAMDISK ETC...)
Auteur du code : Setaou
H@lloWin___HiA
4 avril 2001 à 14:03
SAlut
ya une tt petite erreur dans ton script

If FileName$ <> "." and FileName$ << ".." then



If FileName$ <> "." and FileName$ <> ".." then
Rejoignez-nous