DetailPage-MSS-KB

Base de connaissances

Numéro d'article: 306666 - Dernière mise à jour: mardi 24 juillet 2012 - Version: 1.0

 
Ancien nº de publication de cet article : F306666
Pour Microsoft Visual C++ 2005 et Microsoft Visual .NET C++ de cet article, reportez-vous 307009  (http://support.microsoft.com/kb/307009/ ) .
Pour Microsoft Visual C# 2005 et Microsoft Visual C# .net version de cet article, reportez-vous à 303974  (http://support.microsoft.com/kb/303974/ ) .

Sommaire

Résumé

Cet article explique par le biais de code de façon récursive recherche dans les sous-répertoires des fichiers, en commençant par un répertoire racine. Une recherche chaîne est spécifié afin que vous pouvez rechercher des fichiers correspondant à une certaine critères. Chaque partie du code est expliquée si nécessaire. Un code de travail exemple est également fourni à la fin de l'article.

Répertoire la récursivité est une tâche courante d'e/S pour les développeurs. FileSystemObject simplifie cette tâche pour modèle COM (Component Object) applications. Désormais cette tâche est devenue encore plus simple dans Microsoft .net Framework. Semblable à l' objet FileSystemObject, les classes de l'espace de noms System.IO offrent une approche orientée objet pour accéder aux fichiers et répertoires.

Configuration requise

Le liste suivante met en évidence le matériel recommandé, de logiciels, de réseau infrastructure et des service packs dont vous avez besoin :
  • Microsoft Visual Studio 2005 ou Microsoft Visual Studio .NET
Microsoft Fournit des exemples de programmation fins d'illustration uniquement, sans garantie expresse ou implicite. Ceci inclut, mais n'est pas limité à, l'implicite garanties de qualité marchande ou d'adéquation à un usage particulier. Cet article suppose que vous êtes familiarisé avec le langage de programmation en cours démonstration et les outils utilisés pour créer et déboguer procédures. Ingénieurs du support technique Microsoft peuvent vous expliquer les fonctionnalités d'un procédure particulière, mais ils ne modifieront pas ces exemples pour fournir ajouté fonctionnalité ou construction des procédures répondant à vos besoins spécifiques.

Récursivité de répertoire

Les classes de manipulation de fichiers et de répertoires se trouvent dans l'espace de noms System.IO . Avant de travailler avec ces classes, vous devez importer l'espace de noms suivante dans votre projet.
using System.IO;
				
Les classes d'espace de noms System.IO offrent de nombreuses options pour travailler avec des fichiers et répertoires. L'espace de noms System.IO fournit non seulement des classes que vous pouvez instancier, il fournit également des classes d'utilitaires de fichiers et de répertoires. Ces classes contiennent partagé méthodes que vous pouvez appeler sans avoir à déclarer une variable de ce type. Par exemple, vous pouvez utiliser l'objet d'annuaire pour obtenir les sous-répertoires d'une donnée répertoire.

Le code suivant utilise la méthode GetDirectories partagée de l'objet d'annuaire pour retourner un tableau de chaînes. Ce tableau contient noms de chemin d'accès de répertoire aux sous-répertoires du répertoire C:\, le cas échéant.
Dim directories() As String = Directory.GetDirectories("C:\")
				
L'objet d'annuaire contient également la méthode GetFiles . La méthode GetFiles vous permet d'extraire un tableau de chaînes des fichiers qui correspondent à un certains critères. L'exemple de code suivant utilise l'objet fichier pour récupérer tous les fichiers dans le répertoire C:\ avec l'extension .dll.
Dim files() As String = Directory.GetFiles("C:\", "*.dll")
				
La méthode GetDirectories et la méthode GetFiles de l'objet d'annuaire sont tous qu'il faut rechercher de manière récursive des fichiers qui correspond à la chaîne de recherche. La méthode suivante est utilisée à la récursivité.
    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
				
Le code précédent passe une chaîne qui contient le répertoire qui vous souhaitez rechercher, à DirSearch. Cette valeur de chaîne est le nom de chemin d'accès complet du répertoire. Vous pouvez utiliser la méthode GetDirectories pour récupérer les sous-répertoires du répertoire qui est passé dans votre procédure. Étant donné que la méthode GetDirectories retourne un tableau, vous pouvez utiliser une pour/chaque instruction à itérer sur chaque sous-répertoire. Pour chaque sous-répertoire, utilisez la méthode GetFiles pour itérer sur les fichiers dans ce répertoire. La valeur de la zone de texte sur votre formulaire est transmise à la méthode GetFiles . La zone de texte contient la chaîne de recherche qui filtre le résultats de la méthode GetFiles retourne. Si des fichiers correspondent aux critères de recherche, ils sont ajouté à votre zone de liste. Pour chaque sous-répertoire qui se trouve, appelez de nouveau DirSearch et passez-lui un sous-répertoire. À l'aide de cet appel récursif, Vous pouvez rechercher tous les sous-répertoires d'un répertoire racine donné.

Exemple de code complet

  1. Démarrer un nouveau Microsoft Visual Basic 2005 ou Microsoft Visual Base du projet Application Windows de .net. Par défaut, un formulaire appelé Form1 est créé.
  2. Dans le menu affichage , cliquez sur pour afficher l'Explorateur de solutions.
  3. Dans l'Explorateur de solutions, cliquez droit sur Form1, puis cliquez sur Afficher le Code.
  4. Dans la fenêtre code de Form1, mettez en surbrillance et puis supprimez toutes les code existant.
  5. Collez le code suivant dans la fenêtre code de Form1 formulaire.
    Imports System.IO
    
    Public Class Form1
        Inherits System.Windows.Forms.Form
    
    #Region " Windows Form Designer generated code "
    
        Public Sub New()
            MyBase.New()
    
            'This call is required by the Windows Form Designer.
            InitializeComponent()
    
            'Add any initialization after the InitializeComponent() call.
    
        End Sub
    
        'Form overrides dispose to clean up the component list.
        Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
            If disposing Then
                If Not (components Is Nothing) Then
                    components.Dispose()
                End If
            End If
            MyBase.Dispose(disposing)
        End Sub
            Friend WithEvents cboDirectory As System.Windows.Forms.ComboBox
        Friend WithEvents txtFile As System.Windows.Forms.TextBox
        Friend WithEvents lstFilesFound As System.Windows.Forms.ListBox
        Friend WithEvents lblDirectory As System.Windows.Forms.Label
        Friend WithEvents lblFile As System.Windows.Forms.Label
        Friend WithEvents btnSearch As System.Windows.Forms.Button
            Private components As System.ComponentModel.IContainer
    
        'NOTE: The following procedure is required by the Windows Form Designer.
        'You can use the Windows Form Designer to modify it; however, do not
        'use the code editor to modify it.
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
            Me.btnSearch = New System.Windows.Forms.Button()
            Me.lblFile = New System.Windows.Forms.Label()
            Me.cboDirectory = New System.Windows.Forms.ComboBox()
            Me.txtFile = New System.Windows.Forms.TextBox()
            Me.lstFilesFound = New System.Windows.Forms.ListBox()
            Me.lblDirectory = New System.Windows.Forms.Label()
            Me.SuspendLayout()
            '
            'btnSearch
            '
            Me.btnSearch.Location = New System.Drawing.Point(608, 248)
            Me.btnSearch.Name = "btnSearch"
            Me.btnSearch.TabIndex = 0
            Me.btnSearch.Text = "Search"
            '
            'lblFile
            '
            Me.lblFile.Location = New System.Drawing.Point(8, 16)
            Me.lblFile.Name = "lblFile"
            Me.lblFile.Size = New System.Drawing.Size(144, 16)
            Me.lblFile.TabIndex = 5
            Me.lblFile.Text = "Search for files containing:"
            '
            'cboDirectory
            '
            Me.cboDirectory.DropDownWidth = 112
            Me.cboDirectory.Location = New System.Drawing.Point(8, 128)
            Me.cboDirectory.Name = "cboDirectory"
            Me.cboDirectory.Size = New System.Drawing.Size(120, 21)
            Me.cboDirectory.TabIndex = 2
            Me.cboDirectory.Text = "ComboBox1"
            '
            'txtFile
            '
            Me.txtFile.Location = New System.Drawing.Point(8, 40)
            Me.txtFile.Name = "txtFile"
            Me.txtFile.Size = New System.Drawing.Size(120, 20)
            Me.txtFile.TabIndex = 4
            Me.txtFile.Text = "*.dll"
            '
            'lstFilesFound
            '
            Me.lstFilesFound.Location = New System.Drawing.Point(152, 8)
            Me.lstFilesFound.Name = "lstFilesFound"
            Me.lstFilesFound.Size = New System.Drawing.Size(528, 225)
            Me.lstFilesFound.TabIndex = 1
            '
            'lblDirectory
            '
            Me.lblDirectory.Location = New System.Drawing.Point(8, 96)
            Me.lblDirectory.Name = "lblDirectory"
            Me.lblDirectory.Size = New System.Drawing.Size(120, 23)
            Me.lblDirectory.TabIndex = 3
            Me.lblDirectory.Text = "Look In:"
            '
            'Form1
            '
            Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
            Me.ClientSize = New System.Drawing.Size(688, 273)
            Me.Controls.AddRange(New System.Windows.Forms.Control() _
                {Me.lblFile, Me.txtFile, Me.lblDirectory, Me.cboDirectory, _
                Me.lstFilesFound, Me.btnSearch})
            Me.Name = "Form1"
            Me.Text = "Form1"
            Me.ResumeLayout(False)
    
        End Sub
    
    #End Region
    
        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
    End Class
    					
    Remarque : Vous devez modifier le code dans Visual Basic 2005. Par défaut, Visual Basic crée deux fichiers pour le projet lorsque vous créez un Windows Forms projet. Si le formulaire est nommé Form1, les deux fichiers qui représentent le formulaire sont nommé Form1.vb et Form1.Designer.vb. Vous écrivez le code dans le fichier Form1.vb. Le Concepteur Windows Forms écrit le code dans le fichier Form1.Designer.vb. Le Concepteur Windows Forms utilise le mot clé partial pour diviser l'implémentation de Form1 en deux fichiers distincts. Ce comportement empêche l'objet généré par le Concepteur code d'être entrecoupé par votre code.

    Pour plus d'informations sur les nouvelles améliorations du langage Visual Basic 2005, consultez le Site Web de Microsoft Developer Network (MSDN) :
    http://msdn.Microsoft.com/en-us/library/ms379584 (VS.80) .aspx (http://msdn.microsoft.com/en-us/library/ms379584(VS.80).aspx)
    Pour plus d'informations sur les classes partielles et les Windows Forms Concepteur, visitez le site Web MSDN suivant :
    http://msdn2.Microsoft.com/en-us/library/ms171843.aspx (http://msdn2.microsoft.com/en-us/library/ms171843.aspx)
  6. Appuyez sur F5 pour générer et exécuter l'exemple.

Références

Pour plus d'informations informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
302309  (http://support.microsoft.com/kb/302309/ ) Comment lire un fichier texte à l'aide de System.IO dans Visual Basic 2005 ou dans Visual Basic .net
Pour plus d'informations générales à propos de Visual Basic .NET, consultez le groupe de discussion Usenet suivant :
Visual Basic (http://msdn.microsoft.com/en-us/vstudio/hh388568.aspx)

Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Initiation
  • Microsoft Visual Basic .NET 2002 Initiation
Mots-clés : 
kbvs2005swept kbvs2005applies kbhowtomaster kbmt KB306666 KbMtfr
Traduction automatiqueTraduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d’articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d’avoir accès, dans votre propre langue, à l’ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s’exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s’efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 306666  (http://support.microsoft.com/kb/306666/en-us/ )
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.
Partager
Options de support supplémentaire
Forums du support Microsoft Community
Nous contacter directement
Trouver un partenaire Microsoft Certified Partner
Microsoft Store