IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Lister les dossiers et sous dossiers d'un disque dur


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Par défaut Lister les dossiers et sous dossiers d'un disque dur
    Bonjour,
    Je cherche depuis environ deux mois ( pas jours et nuits je vous rassure ) un moyen de lister tous les dossiers et sous dossiers d'un disque dur et d'en scanner les fichiers afin de récupérer les fichiers d'une certaine extension que j'aurai choisie auparavant. Je pense qu'il faut d'abord que j'arrive a lister les dossiers en partant de la racine C: ; ensuite lister les sous dossiers des dossiers trouvés dans C: ensuite une fois tout cela fini, lister les fichiers de tous les dossiers trouvés et récupérer que les fichiers avec l'extension choisie.

    J'ai donc trouvé plusieurs codes grâce à mes nombreuses recherches, au début j'avais un problème d'accès aux dossiers qui me faisait planter le programme, j'ai trouvé un code qui me permet de lister les dossiers de C: mais je n'arrive pas à le modifier pour qu'il scanne les sous dossiers des dossiers trouvés, de plus il me met dans ma liste box plusieurs fois les dossiers.
    Je voudrais donc que quelqu'un m'aide à le modifier pour qu'il scanne les sous dossiers et j’essaierai de me débrouiller pour qu'il récupère les fichiers.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
        Private Sub LireRep(ByVal Repertoire As String)
            Dim Chemin As String
            Dim i As Int16
            Dim Exclure() As String = {}
            Dim SousRep As String() = Directory.GetDirectories(Repertoire)
     
            For Each sRep As String In SousRep
                Chemin = Path.GetFileName(sRep).ToUpper
                'Debug.Print(Chemin)
                For i = 0 To UBound(Exclure)
                    If Microsoft.VisualBasic.Left(Chemin, Len(Exclure(i))) = Exclure(i) Then Exit For
                Next
                If i > UBound(Exclure) Then
            Try
                        Dim Repertoires As String() = Directory.GetDirectories("C:\")
                        For Each Rep As String In Repertoires
                            Me.ListBox1.Items.Add(Path.GetFileName(Rep))
                        Next
                    Catch ex As Exception
                        Stop
                    End Try
                End If
            Next
        End Sub
     
        Private Sub BtnRécupérer_Click(sender As Object, e As EventArgs) Handles BtnRécupérer.Click
            Call LireRep("C:\")
        End Sub


    Merci de votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    il faut que tu utlise une methode récursive sur la methode qui scan tes dossiers.

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Par défaut
    Salut gcorbineau,
    j'ai recommencé mes recherches sur la méthode récursive, et j'ai trouvé cet excellent article sur le site de Mircrosoft, http://support.microsoft.com/kb/306666/fr
    Mais j'ai un problème, lorsque je copie le code comme demandé dans la partie "Exemple de code complet" mais il y avait des erreurs ( celle de la remarque un peu plus bas ) Je me suis dit, c'est pas grave je vais juste copier le code et créer moi même les composants c'est a dire :
    btnSearch = Button()
    lblFile = Label()
    cboDirectory = ComboBox()
    txtFile = TextBox()
    lstFilesFound = ListBox()
    lblDirectory = Label()

    J'ai ensuite copié le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
        Private Sub btnSearch_Click(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles btnSearch.Click
            lstFilesFound.Items.Clear()
            txtFile.Enabled = False
            cboDirectory.Enabled = False
            btnSearch.Text = "Searching..."
            Me.Cursor = Cursors.WaitCursor
            Application.DoEvents()
            DirSearch(cboDirectory.Text)
            btnSearch.Text = "Search"
            Me.Cursor = Cursors.Default
            txtFile.Enabled = True
            cboDirectory.Enabled = True
        End Sub
     
        Sub DirSearch(ByVal sDir As String)
            Dim d As String
            Dim f As String
     
            Try
                For Each d In Directory.GetDirectories(sDir)
                    For Each f In Directory.GetFiles(d, txtFile.Text)
                        lstFilesFound.Items.Add(f)
                    Next
                    DirSearch(d)
                Next
            Catch excpt As System.Exception
                Debug.WriteLine(excpt.Message)
            End Try
        End Sub
     
        Private Sub Form1_Load(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles MyBase.Load
            Dim s As String
            cboDirectory.Items.Clear()
            For Each s In Directory.GetLogicalDrives()
                cboDirectory.Items.Add(s)
            Next
            cboDirectory.Text = "C:\"
        End Sub
    Aucune erreur de compilation, mais lorsque je cherche, le programme ne trouve rien et donc la listbox n'ajoute aucun composant.
    J'espère que tu va trouver ce qu'il se passe, personnellement j'ai relu le code plusieurs fois et je ne comprends pourquoi ça ne marche pas, en plus c'est exactement le code qu'il me faut !
    Merci de ton aide !

  4. #4
    Membre très actif
    Homme Profil pro
    Retraité intello
    Inscrit en
    Juillet 2012
    Messages
    186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Retraité intello

    Informations forums :
    Inscription : Juillet 2012
    Messages : 186
    Par défaut
    Bonjour.

    Je vous signale que dans son cours VB.NET disponible sur ce site, Philippe Lasserre traite le sujet de façon détaillée.

    Cordialement.

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Par défaut
    Bon voilà, après 3 mois de recherches j'ai enfin trouvé, je m'auto répond
    Voici un code qui cherche les images et les prévisualise dans une picture box lorsqu'on clique dessus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Option Strict On
    Public Class Form1
        'ajout d'une listbox
        Dim liste As New ListBox With {.Parent = Me, .Width = 400, .Height = 400}
        'ajout d'un picturebox
        Dim box As New PictureBox With {.Parent = Me, .Bounds = New Rectangle(400, 0, 400, 400), .SizeMode = PictureBoxSizeMode.AutoSize}
     
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            'redimmension formulaire
            Me.Size = New Size(800, 450)
            'ajout événement à l'objet liste
            AddHandler liste.SelectedIndexChanged, AddressOf listeclick
            'recherche dans tous les disques
            For Each drive As IO.DriveInfo In IO.DriveInfo.GetDrives
                If drive.IsReady Then
                    'ici je recherche les jpg ainsi que les gif
                    ChercheImages(New IO.DirectoryInfo(drive.RootDirectory.ToString), {"jpg", "gif"})
                End If
            Next
        End Sub
     
        Private Sub listeclick(sender As Object, e As EventArgs)
            'affiche l'image sélectionnée dans picturebox
            Using reader As New IO.FileStream(liste.Text, IO.FileMode.OpenOrCreate)
                box.Image = Image.FromStream(reader)
            End Using
        End Sub
     
        Private Sub ChercheImages(dossier As IO.DirectoryInfo, Extensions() As String)
            Try
                'pour chaque extension...
                For Each ext As String In Extensions
                    '...on fait une liste des fichiers concernés...
                    Dim f() As IO.FileInfo = dossier.GetFiles("*." & ext)
                    '...et on ajoute les fichiers à la listbox
                    For Each img As IO.FileInfo In f
                        liste.Items.Add(img.FullName)
                    Next
                Next
                'recherche des sous-dossiers...
                For Each d As IO.DirectoryInfo In dossier.GetDirectories
                    'et recherche récursive des fichiers
                    ChercheImages(d, Extensions)
                Next
            Catch ex As Exception
     
            End Try
        End Sub
    End Class

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/07/2012, 11h50
  2. Lister les dossiers et sous dossiers
    Par alexandreS dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 20/09/2010, 18h44
  3. Lister les dossiers et sous dossiers
    Par alexandreS dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/09/2010, 07h41
  4. [XL-2003] Lister les fichiers dans les dossiers et sous dossiers
    Par doncamelo dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 14/07/2010, 10h41
  5. [VB6]lister les dossiers et sous dossier
    Par Jacen dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 28/04/2006, 08h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo