Come directory di ricerca in modo ricorsivo utilizzando Visual Basic 2005 o Visual Basic .NET

Per la versione di questo articolo relativa a Microsoft Visual C++ 2005 e Microsoft Visual C++ .NET vedere
.

Per la versione di questo articolo relativa a Microsoft Visual C# 2005 e Microsoft Visual C# .NET vedere
.

Riepilogo

In questo articolo è riportato il codice come in modo ricorsivo le sottodirectory di ricerca per i file, a partire da una directory radice. Una stringa di ricerca viene specificata in modo che è possibile cercare i file che corrispondono a determinati criteri. Ogni parte del codice è illustrato in base alle esigenze. Un esempio di codice funzionante è inoltre disponibile alla fine dell'articolo.

Ricorsione delle directory è un'operazione dei / o comune per gli sviluppatori. FileSystemObject , questa attività risulta semplificata per le applicazioni di Component Object Model (COM). Questa attività è oggi ancora più semplice in di Microsoft.NET Framework. Analogamente a FileSystemObject, le classi dello spazio dei nomi System.IO forniscono un modo orientato ad oggetti per accedere a file e directory.

Requisiti

Nell'elenco seguente sono indicati l'hardware consigliato, il software, l'infrastruttura di rete e i service pack necessari:

  • Microsoft Visual Studio 2005 o Microsoft Visual Studio .NET

Microsoft fornisce esempi di programmazione a scopo puramente illustrativo, senza alcuna garanzia espressa o implicita. Ciò include, ma non limitato a, le garanzie implicite di commerciabilità o idoneità per uno scopo particolare. In questo articolo si presuppone che si abbia familiarità con il linguaggio di programmazione in questione e gli strumenti utilizzati per creare ed eseguire la procedura di debug. I tecnici del supporto Microsoft possono spiegare la funzionalità di una particolare procedura, ma in nessun caso possono modificare questi esempi per fornire funzionalità aggiuntive o creare procedure atte a soddisfare specifiche esigenze.

Ricorsione delle directory

Le classi di manipolazione di file e directory risiedono nello spazio dei nomi System.IO . Prima di utilizzare queste classi, è consigliabile importare lo spazio dei nomi seguente all'interno del progetto.

using System.IO;

Le classi dello spazio dei nomi System.IO forniscono molte opzioni per l'utilizzo di file e directory. Lo spazio dei nomi System.IO fornisce non solo le classi che è possibile creare un'istanza, ma fornisce anche classi di utilità di file e directory. Queste classi contengono metodi shared che è possibile chiamare senza dover dichiarare una variabile di quel tipo. Ad esempio, è possibile utilizzare l'oggetto Directory per ottenere le sottodirectory di una determinata directory.

Il codice seguente utilizza il metodo GetDirectories condiviso dell'oggetto Directory per restituire una matrice di stringhe. Questa matrice contiene i nomi di percorso di directory per le sottodirectory della directory C:\, se disponibile.

Dim directories() As String = Directory.GetDirectories("C:\")

L'oggetto Directory contiene anche il metodo GetFiles . Il metodo GetFiles consente di recuperare una matrice di stringhe di file che corrispondono a criteri specifici. Nell'esempio di codice seguente utilizza l'oggetto File per recuperare tutti i file nella directory C:\ che terminano con estensione dll.

Dim files() As String = Directory.GetFiles("C:\", "*.dll")

Il metodo GetDirectories e il metodo GetFiles dell'oggetto Directory sono operazioni che è necessario cercare in modo ricorsivo i file che corrispondono alla stringa di ricerca. Il metodo riportato di seguito viene utilizzato per eseguire la ricorsione.

    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

Il codice precedente passa una stringa che contiene la directory che si desidera eseguire la ricerca, a DirSearch. Questo valore stringa è il nome di percorso completo della directory. È possibile utilizzare il metodo GetDirectories per recuperare le sottodirectory della directory che viene passato all'interno della procedura. Poiché il metodo GetDirectories restituisce una matrice, è possibile utilizzare un per/ogni istruzione di iterazione in ogni sottodirectory. Per ogni sottodirectory, utilizzare il metodo GetFiles per scorrere i file nella directory. Il valore della casella di testo nel form viene passato al metodo GetFiles . La casella di testo contiene la stringa di ricerca che filtra i risultati che restituisce il metodo GetFiles . Se eventuali file che corrispondono ai criteri di ricerca, vengono aggiunti alla casella di riepilogo. Per ogni sottodirectory individuata, chiamare nuovamente DirSearch e passarlo a una sottodirectory. Utilizzando una chiamata ricorsiva, è possibile cercare tutte le sottodirectory di una determinata directory radice.

Esempio di codice completo

  1. Avviare un nuovo progetto applicazione Windows di Microsoft Visual Basic .NET o di Microsoft Visual Basic 2005. Per impostazione predefinita, viene creato un form denominato Form1.

  2. Dal menu Visualizza , fare clic per visualizzare Esplora soluzioni.

  3. In Esplora soluzioni destro Form1e quindi fare clic su Visualizza codice.

  4. Nella finestra del codice Form1 evidenziare e quindi eliminare tutto il codice esistente.

  5. Incollare il codice seguente nella finestra del codice di Form1.

    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

    Nota: È necessario modificare il codice in Visual Basic 2005. Per impostazione predefinita, Visual Basic crea due file per il progetto quando si crea un progetto Windows Form. Se il form denominato Form1, i due file che rappresentano il form sono denominati Form1. vb e Form1. Scrivere il codice nel file Form1. vb. In Progettazione Windows Form scrive il codice nel file Form1. In Progettazione Windows Form utilizza la parola chiave partial per dividere l'implementazione di Form1 in due file separati. Questo comportamento impedisce che il codice generato da progettazione venga frammisto al codice.

    Per ulteriori informazioni sui miglioramenti del linguaggio Visual Basic 2005, visitare il seguente sito Web Microsoft Developer Network (MSDN):

    Per ulteriori informazioni sulle classi parziali e Progettazione Windows Form, visitare il seguente sito Web MSDN:

  6. Premere F5 per compilare ed eseguire l'esempio.

Riferimenti

Per ulteriori informazioni, fare clic sul seguente numero di articolo per visualizzare l'articolo della Microsoft Knowledge Base:

Come leggere un file di testo utilizzando System.IO in Visual Basic 2005 o Visual Basic .NET

Per ulteriori informazioni generali su Visual Basic .NET, vedere il seguente newsgroup Usenet:

Serve aiuto?

Amplia le tue competenze
Esplora i corsi di formazione
Ottieni in anticipo le nuove caratteristiche
Partecipa a Microsoft Insider

Queste informazioni sono risultate utili?

Grazie per il feedback!

Grazie per il tuo feedback! Potrebbe essere utile metterti in contatto con uno dei nostri operatori del supporto di Office.

×