Il seguente snippet di codice permette di eseguire – dato un percorso iniziale ed un pattern file da considerare – un rapido conteggio dei files presenti nell'intera gerarchia della directory indicata, ovvero nella cartella stessa ed in tutte le sottodirectory ad essa relative. La funzione qui implementata è di tipo ricorsivo, dunque – calcolato il numero di files presenti in una cartella – richiama se stessa per essere eseguita sulle directory di livello inferiore, fino a che non esaurisce la struttura della directory iniziale.
private void ConteggiaFiles(String path, String pattern, ref long numFiles){
DirectoryInfo dI = new DirectoryInfo(path);
if (dI == null) return;
numFiles += dI.GetFiles(pattern).LongLength;
foreach (DirectoryInfo dS in dI.GetDirectories()){
ConteggiaFiles(dS.FullName, pattern, ref numFiles);
}
}
La variabile long che, ad ogni iterazione, ospita il numero di files calcolato, è passata per riferimento. Ciò significa che non verrà considerato semplicemente il valore che contiene, bensì il suo indirizzo fisico di memoria. Dunque, ad ogni ciclo, numFiles verrà realmente incrementata del numero di elementi riscontrati in un dato percorso, andando a modificarne il valore iniziale in memoria.
L’utilizzo della funzione è semplice: supponendo di volerla lanciare alla pressione di un ipotetico tasto «button1», il codice che gestisce l’evento Click() di tale bottone potrebbe essere il seguente:
private numFiles verrà realmente incrementata del numero di elementi riscontrati in un dato percorso, andando a modificarne il valore iniziale in memoria.
L’utilizzo della funzione è semplice: supponendo di volerla lanciare alla pressione di un ipotetico tasto «button1», il codice che gestisce l’evento Click() di tale bottone potrebbe essere il seguente:
private
long nFiles = 0;
ConteggiaFiles(@"C:\TEMP\", "*.*", ref nFiles);
MessageBox.Show(nFiles.ToString());
}
Inizialmente, verrà dichiarata la variabile long dedicata al contenimento del valore pari al numero totale dei files presenti sotto il percorso “C:\TEMP\” (e relative sottocartelle), senza distinzione del tipo di file (si noti l’argomento pattern, passato a “*.*”: eventuali variazioni a tale parametro ci porterebbero a poter considerare in maniera esclusiva determinate tipologie di files, ad esempio “*.txt”). Il lancio della funzione, come accennato sopra, modificherà fisicamente il valore di nFiles (inizializzata a zero), e dunque – al termine della sua esecuzione – l’eventuale emissione di un messaggio che presenti il valore della variabile, mostrerà il numero di files calcolato.