[vb] remplir un treeview avec les disques du pc

Description

Une routine qui permet de remplir un TreeView avec les Disques du système et les répertoires qu?ils contiennent.
Le problème à été de trouver les clés des nodes, il arrivait toujours qu?une clé était éditée en double, puis j?ai trouver la parade, comme clé j?ai mis le chemin complet du répertoire et de cette façon il est certain qu?il n?y auras pas de doublons.
Je n?ai pas été à même de tester les disques réseaux vu que je n?ai pas de réseaux, à vous de contrôler si vous en avez la possibilité.
J?ai éliminé les répertoires système, mon but étant de faire un explorateur d?images. (disponible au téléchargement).
La routine est récursive et est relativement courte.
Ne vous étonnez pas du temps qu?il faut (ça dépend de votre système) mais la routine va pratiquement aussi vite que l?explorateur de Windows sauf qu?elle ne travail pas à l?initialisation du PC. Pour comparer, voyez le temps que met Windows pour initialiser un disque externe ou une clé.

Vous pouvez télécharger le projet d?un explorateur d?images complet en VB6.
Quand vous cliquez sur une image le message affiche le N° et le chemin complet de l?image, à vous d?en faire ce que vous voulez.
Vous pouvez aussi modifier les filtres pour permettre l?affichage d?autre images.
Le projet contient un OCX et une DLL perso, vous devez donc?
Dézipez le répertoire.
Ne cliquez pas sur le projet, naviguez jusque sur l?icône de VB6, clic droit sur l?icône et ouvrir en tant qu?administrateur.
A l?ouverture cliquez sur ?Existant? et ouvrez le projet LN_Explorateur.vpb
Note : Ce n?est nécessaire que la première fois, ensuite ça fonctionne normalement.
Modifier la largeur de la TreeView en déplaçant la ligne rouge.(Clic sur la ligne et déplacer)
Modifier la grandeur des miniatures avec le bouton ?S?

L?affichage des images est réaliser avec la dll Gdi+ réduite à sa plus simple expression.

Source / Exemple :


Option Explicit

Sub Initialise_TreeDir(TreeDir As TreeView)
Dim ExpDr, Rep, Drv, S As String, N, D, a, r, Unite
Dim Cle As String, sCle As String, Num As Integer, Sr As Integer
Dim nodX As Node
    Num = 64
    Set ExpDr = CreateObject("Scripting.FileSystemObject")
    Set Drv = ExpDr.Drives
    For Each D In Drv
        S = D.DriveLetter '& ":"
        If D.DriveType = 3 Then 'réseaux
            N = D.ShareName
        ElseIf D.DriveType = 1 Then  'DD externe
            N = " - Média amovible - (" & D.VolumeName & ")"
            Incr Num: Cle = S
            S = S & ":\"
            Set nodX = TreeDir.Nodes.Add(, , Cle, S & N, 6)
            AjoutRep S, Cle, TreeDir
        ElseIf D.DriveType = 2 Then  'DD
            N = D.VolumeName
            Incr Num: Cle = S
            S = S & ":\"
            Set nodX = TreeDir.Nodes.Add(, , Cle, S & " - (" & N & ")", 2)
            AjoutRep S, Cle, TreeDir
        ElseIf D.DriveType = 4 Then 'DVD
            On Error Resume Next
            N = D.VolumeName
            If Err = 71 Then
                N = "Lecteur DVD - (vide) "
            Else
                N = "Lecteur DVD - (" & N & ")"
            End If
            Incr Num: Cle = Chr(Num) & "0"
            S = S & ":\ - "
            Set nodX = TreeDir.Nodes.Add(, , Cle, S & N, 3)
        Else
            Stop
        End If
        S = ""
        D = ""
    Next
    Set nodX = Nothing
    Set ExpDr = Nothing
    Set Drv = Nothing

End Sub

Sub AjoutRep(Chem As String, Cle As String, TreeDir As TreeView)
Dim Rep, sRp, Obj, sRep, sR2
Dim sCle As String, Num As Integer, Sr As Integer
Dim nodX As Node
Dim NbsR As Integer, S As String
Sr = 9
    Chem = Chem & IIf(Right(Chem, 1) = "\", "", "\")
    Set Obj = CreateObject("Scripting.FileSystemObject")
    Set Rep = Obj.Getfolder(Chem)
    If Left(Rep.Name, 1) = "$" Then GoTo Passe2
    Set sRep = Rep.subfolders
    For Each sRp In sRep
        S = UCase(sRp.Name)
        If Left(S, 1) = "$" Or S = "WINDOWS" Or sRp.Attributes > 100 Or sRp.Attributes = 19 _
            Or Left(S, 6) = "SYSTEM" Or Left(S, 7) = "PROGRAM" Or Left(S, 4) = "USER" _
            Or Left(S, 6) = "DRIVER" Or Left(S, 5) = "TOOLS" Then GoTo Passe
        On Error Resume Next
        Set sR2 = sRp.subfolders
        NbsR = sR2.Count
        If Err <> 0 Then Err = 0: GoTo Passe
        Incr Sr
        sCle = sRp.Path & "\"
        On Error GoTo 0
        'Debug.Print sRp.Name; "   "; Cle; "  "; sCle
        Set nodX = TreeDir.Nodes.Add(Cle, tvwChild, sCle, sRp.Name, 5, 4)
        If NbsR > 0 Then
            AjoutRep sRp.Path, sCle, TreeDir
        End If
Passe:
    Next
Passe2:

    Set Obj = Nothing
    Set Rep = Nothing
    Set sRep = Nothing
    Set nodX = Nothing
    Set sR2 = Nothing
End Sub

Conclusion :


Je pense que la routine devrait être façilement transposable en VB.Net

Codes Sources

A voir également

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.