Directory di file e LINQ
Molte operazioni sui file system sono essenzialmente query e sono pertanto appropriate per essere utilizzate con LINQ.
Nota
Se si desidera eseguire query a livello di codice sul contenuto di più tipi di file e documenti, utilizzare il motore Windows Desktop Search. Sebbene attualmente non sia possibile eseguire le query con LINQ, viene fornito un servizio di indicizzazione potente che gestisce in modo efficace le complessità del file system.
Le query illustrate in questa sezione sono non distruttive. Non vengono utilizzate per modificare il contenuto dei file o delle cartelle originali. Viene seguita la regola che le query non devono causare alcun effetto collaterale. In generale, il codice, incluse le query che eseguono gli operatori di creazione, aggiornamento ed eliminazione, che modifica i dati di origine deve essere tenuto separato dal codice che esegue solo una query sui dati.
In questa sezione sono trattati i seguenti argomenti:
Procedura: eseguire una query per trovare i file con un attributo o un nome specifico
Viene illustrato come cercare file esaminando una o più proprietà dell'oggetto FileInfo.Procedura: raggruppare i file per estensione (LINQ)
Viene illustrato come restituire gruppi dell'oggetto FileInfo in base all'estensione di file.Procedura: eseguire una query per trovare il numero totale di byte in un set di cartelle (LINQ)
Viene illustrato come restituire il numero complessivo di byte in tutti i file di una struttura ad albero di directory specificata.Procedura: confrontare il contenuto di due cartelle (LINQ)
Viene illustrato come restituire tutti i file presenti in due cartelle specificate e anche tutti i file presenti in una cartella, ma non nell'altra.Procedura: eseguire una query per trovare il file o i file più grandi in una struttura ad albero di directory (LINQ)
Viene illustrato come restituire il file più grande o più piccolo o il numero specificato di file in una struttura ad albero di directory.Procedura: eseguire una query per trovare i file duplicati in una struttura ad albero di directory (LINQ)
Viene illustrato come raggruppare tutti i nomi file che si trovano in più di un percorso in una struttura ad albero di directory specificata. Viene inoltre illustrato come eseguire confronti più complessi in base a un operatore di confronto personalizzato.Procedura: eseguire una query sul contenuto dei file in una cartella (LINQ)
Viene illustrato come scorrere le cartelle in una struttura ad albero, aprire ogni file ed eseguire una query sul contenuto del file.
Commenti
La creazione di un'origine dati che rappresenti esattamente il contenuto del file system e gestisca correttamente le eccezioni è un'attività complessa. Negli esempi riportati in questa sezione viene creato un insieme di snapshot di oggetti FileInfo che rappresentano tutti i file presenti in una cartella radice specificata e in tutte le relative sottocartelle. Lo stato effettivo di ogni oggetto FileInfo può cambiare nell'intervallo di tempo compreso tra l'inizio e la fine dell'esecuzione di una query. Ad esempio, è possibile creare un elenco di oggetti FileInfo da utilizzare come origine dati. Se si tenta di accedere alla proprietà Length in una query, l'oggetto FileInfo tenterà di accedere al file system per aggiornare il valore di Length. Se il file non esiste più, verrà generata un'eccezione FileNotFoundException nella query, anche se non si sta eseguendo una query direttamente sul file system. In alcune query illustrate in questa sezione viene utilizzato un metodo separato che utilizza queste particolari eccezioni in determinati casi. Un'altra opzione consiste nel mantenere l'origine dati aggiornata in modo dinamico utilizzando FileSystemWatcher.