[ Avertissement : Cette DLL est en perpétuelle évolution. vous trouverez la dernièreversion en téléchargement sur mon site perso :
http://perso.club-internet.fr/jlved/ ]
Comme jai souvent été amené à explorer des répertoires dans mes projets VB j'ai créé une DLL
qui regroupe la plupart des informations que jutilise fréquemment.
Je me doute que des DLL de ce type existent déjà (peut être même dans Windows), alors si vous en connaissez, merci de me le signaler.
Cette DLL donne accès à 4 objets :
- cPath
- cDrive
- cDirectory
- cFile
cPath permet de tester que le chemin passé en paramètre renvoie bien un répertoire ou un fichier
cDrive à partir de la lettre du lecteur cet objet nous donne :
le type de lecteur
le système de fichier
le numéroID
le nom de Volume
cDirectory donne accès à deux collections :
la collection Fichiers renvoie tous les fichiers contenus dans ce répertoire (classés ou non) cette collection peut être filtrée (*.exe ; *.*...)
la collection Directories renvoie tous les sous-répertoires (classés ou non)
(y compris les fichiers et répertoires cachés et système)
cFile simplifie les traitements souvent effectuées sur les fichiers. A partir du chemin complet il donne accès à :
lextension
le nom sans lextension
le chemin
la taille
les différentes dates
Il permet de plus deffectuer les opérations les plus courantes :
Renommer
Déplacer
Supprimer
Modifier les attributs
Source / Exemple :
Lexemple suivant met en uvre la DLL pour la lecture dune arborescence.
Pour executer cet exemple :
Créez un nouveau projet
Dans le menu Projet/Références cliquez sur parcourir et indiquez lemplacement de la DLL JLV_File.dll.
Sélectionnez là et validez.
Dans Form1, créez :
- un bouton (Command1)
- une listbox (List1)
- une textbox (text1)
- un Label (label1)
(Ces contrôles seront réarrangés par le code)
Copiez lexemple ci-dessous dans la fenêtre de code et lancez le programme.
Dans le TextBox (Text1) entrez un nom de répertoire et validez en cliquant sur le bouton
Option Explicit
Public V_RepApp As New cDirectory
Public V_Chemin As New cPath
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Command1_Click()
List1.Clear
V_RepApp = Text1.Text
SauveInfoRep
End Sub
Public Function SauveInfoRep() As String
Dim Tab_rep() As New cDirectory
Dim V_FichTemp As New cFile
Dim i%, j%, k%, l%
Dim V_Taille As Double
Dim V_MilSec As Long
V_MilSec = GetTickCount()
ReDim Preserve Tab_rep(0)
Tab_rep(0) = V_RepApp.FullPath
Do Until i% > UBound(Tab_rep)
Label1 = Tab_rep(i%).FullPath
DoEvents
List1.AddItem IIf(Tab_rep(i%).DateCreation <> "00:00:00", Format(Tab_rep(i%).DateCreation, "dd/mm/yy"), vbNullString) _
& vbTab & Tab_rep(i%).StrAttributes & vbTab & UCase(Tab_rep(i%).FullPath)
For j% = 1 To Tab_rep(i%).DirectoriesCount
ReDim Preserve Tab_rep(UBound(Tab_rep) + 1)
'évite la lecture des Répertoires systèmes et cachés
Tab_rep(UBound(Tab_rep)).TypeDirectoriesListed = JLV_ListDirectoriesAttrNormal
Tab_rep(UBound(Tab_rep)).FullPath = Tab_rep(i%).FullPath & "\" & _
Tab_rep(i%).Directories(j%)
List1.AddItem vbTab & "\" & Tab_rep(i%).Directories(j%)
Next
For k% = 1 To Tab_rep(i%).FilesCount
V_FichTemp = Tab_rep(i%).FullPath & "\" & _
Tab_rep(i%).Files(k%)
If List1.ListCount > 32730 Then
'limitation du type de données integer utilisée dans le ListBox
List1.AddItem "Impossible d'afficher toutes les entrées (>32730)"
Exit Do
Else
List1.AddItem vbTab & Format(V_FichTemp.DateCreation, "dd/mm/yy") & _
vbTab & " " & V_FichTemp.StrAttributes & _
vbTab & V_FichTemp.FileSize & _
vbTab & V_FichTemp.NameWithExtension
V_Taille = V_Taille + V_FichTemp.FileSize
l% = l% + 1
End If
Next k%
i% = i% + 1
List1.AddItem vbNullString
Loop
ReDim Tab_rep(0)
'compte rendu
V_MilSec = (GetTickCount() - V_MilSec) / 1000
Label1 = "Nombre de Répertoires :" & i% - 1 & ". / Nombre de fichiers :" & _
l% & ". / Taille Totale : " & Int(V_Taille / 1024) & _
" Ko. / Durée du traitement : " & V_MilSec & " Secondes."
End Function
Private Sub Form_Resize()
'mise en forme de la feuille
On Error Resume Next
Text1.Top = 0: Command1.Height = Text1.Height: Command1.Top = 0
List1.Left = 0: Text1.Left = 0: Label1.Left = 0: Command1.Left = Text1.Width
List1.Top = Text1.Height
List1.Width = ScaleWidth - List1.Left
List1.Height = ScaleHeight - (List1.Top + Label1.Height)
Label1.Top = ScaleHeight - Label1.Height
Label1.Width = ScaleWidth - Label1.Left
End Sub
Conclusion :
le Zip contient la mise à jour de la DLL (V 2.02) et un fichier d'aide complet
Pour obtenir les sources mailez-moi
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.