Dll- récupération d'informations sur les lecteurs, répertoires et fichiers

Soyez le premier à donner votre avis sur cette source.

Vue 8 739 fois - Téléchargée 381 fois

Description

[ 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 j’ai souvent été amené à explorer des répertoires dans mes projets VB j'ai créé une DLL
qui regroupe la plupart des informations que j’utilise 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 à :
l’extension
le nom sans l’extension
le chemin
la taille
les différentes dates

Il permet de plus d’effectuer les opérations les plus courantes :
Renommer
Déplacer
Supprimer
Modifier les attributs

Source / Exemple :


L’exemple suivant met en œuvre la DLL pour la lecture d’une arborescence. 
Pour executer cet exemple :
Créez un nouveau projet
Dans le menu Projet/Références cliquez sur parcourir et indiquez l’emplacement 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 l’exemple 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

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Private Const DRIVE_REMOVABLE = 2
Private Const DRIVE_FIXED = 3
Private Const DRIVE_REMOTE = 4
Private Const DRIVE_CDROM = 5
Private Const DRIVE_RAMDISK = 6

On peut utiliser cette API pour acceder à certaines infos sur les disques.

ex : TypeLecteur = GetDriveType(LettreLecteur + "").

Je suis un débutant alors si tu connais deja ça, excuse moi
C'est une bonne idée de créer des composants de la sorte. C'est un travail qui ne fait qu'avancer la programmation orientée objet qui s'est avérée indiscutablement la meilleure.
ça doit être une DLL activex qui est bien choisie vue le nombre de routine qu'elle encapsule dans son ventre:-/
Encouragement pour l'idée.
Cordialement
Touil

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.