VB.NET : scansione ricorsiva di files e directory

vbnet_scansione_ricorsiva_files_e_directoriesIn questo articolo vi illustro un semplicissimo codice per effettuare la scansione ricorsiva di una cartella: viene passato il percorso di una cartella radice ad una funzione e questa apre una ad una tutte le eventuali sottocartelle per elencarne i files contenuti. Alla fine dell’operazione vengono mostrati in una textbox tutti i files trovati nella cartella radice con il relativo percorso.

Per iniziare dovremo importare la libreria System.IO che contiene tutte le funzioni che ci servono per operare su files e directories:

Imports System.IO

Nel form abbiamo inserito una textbox multilinea e una label che mostra il numero di files scansionati man mano che la scansione procede. Il percorso dei singoli files, completo del nome del file, viene aggiunto ad uno StringBuilder il cui contenuto viene illustrato nella textbox multilinea una volta terminata la scansione.

Faremo quindi utilizzo di due funzioni ricorsive (ovvero che si chiamano l’un l’altra): una per eseguire la scansione delle directory (ProcessDir) ed una per eseguire la scansione dei files (ProcessFile):

Public Sub ProcessDir(ByVal Dir As String)
 
        ' Processa la lista dei files trovati nella directory passata
        Dim fileEntries As String() = Directory.GetFiles(Dir)
        For Each fileName As String In fileEntries
            ProcessFile(fileName)
        Next
 
        ' Processa tutte le directory trovate nella directory passata alla funzione
        Dim subdirectoryEntries As String() = Directory.GetDirectories(Dir)
        For Each subdirectory As String In subdirectoryEntries
            ProcessDir(subdirectory)
        Next
 
End Sub
 
Public Sub ProcessFile(ByVal FilePath As String)
 
        ' processa il file
 
        ' possiamo recuperare varie informazioni sul file tramite FileInfo
        ' ed eventualmente inserire qui altre routine di controllo, in questo
        ' codice ci limitiamo soltanto ad elencare tutti i files con le sottodirectory
        ' Dim InfoFile As New FileInfo(FilePath)
 
        FileList.Append(FilePath & vbCrLf) ' aggiungo il file esaminato ora alla lista
 
        CountFiles += 1 ' incremento il numero di files
 
        lblNoFiles.Text = CountFiles ' aggiorno la label col numero di files
 
        lblNoFiles.Refresh() ' e ne effettuo il refresh
 
    End Sub

In realtà la funzione ProcessFile potrebbe essere qualcosa di più elaborato (come specificato nelle note si potrebbe utilizzare la funzione FileInfo per recuperare informazioni sul file ed eseguire altre, specifiche, elaborazioni), ma qui ci siamo limitati unicamente a inserire il file completo di percorso in una stringa. Sta a voi elaborare qualcosa di più complesso.

Gli utenti iscritti al sito possono scaricare gratuitamente il codice sorgente di esempio, completo di chiari commenti che possono aiutarvi a comprendere e a fare meglio di me.

Come sempre si raccomanda di non fare utilizzo commerciale del codice proposto e di segnalare/commentare.

[download#44]

Se questo articolo ti è piaciuto, condividilo su un social:
Se l'articolo ti è piaciuto o ti è stato utile, potresti dedicare un minuto a leggere questa pagina, dove ho elencato alcune cose che potrebbero farmi contento? Grazie :)