VB.NET : scansione ricorsiva di files e directory
In 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]