Operare sul file system

Completato

.NET contiene tipi predefiniti che consentono di lavorare con il file system e che si trovano nello spazio dei nomi System.IO.

In questa unità si apprendono informazioni sui tipi disponibili in System.IO usando C# per leggere un file system al fine di individuare file e directory.

Scenario

I rivenditori di grandi dimensioni spesso scrivono i dati nei file, in modo da poterli elaborare in un secondo momento in batch.

Presso Tailwind Traders, ognuno dei negozi scrive i totali delle vendite in un file e invia tale file a una posizione centrale. Per usare tali file, è necessario che l'azienda crei un processo batch in grado di interagire con il file system.

Includere lo spazio dei nomi System.IO

Lo spazio dei nomi System.IO contiene tipi predefiniti che consentono di interagire con file e directory. Ad esempio, è possibile recuperare le raccolte di file e directory in base ai criteri di ricerca delle proprietà get e set per file e directory. È anche possibile usare i tipi di spazio dei nomi System.IO per leggere e scrivere file e flussi di dati in modo sincrono e asincrono.

Per il momento, ci si concentrerà su ciò che è necessario sapere per lavorare con le directory usando la classe Directory inclusa nello spazio dei nomi System.IO. La classe Directory espone i metodi statici per la creazione, lo spostamento e l'enumerazione nelle directory e sottodirectory.

Elencare tutte le directory

La classe Directory viene spesso usata per elencare (o enumerare) directory. La struttura di file di Tailwind Traders, ad esempio, ha una cartella radice denominata stores. In questa cartella si trovano sottocartelle organizzate in base al numero del negozio e all'interno di tali cartelle si trovano i file dei totali delle vendite e di inventario. La struttura è simile all'esempio seguente:

📂 stores
    📄 sales.json
    📄 totals.txt
    📂 201
       📄 sales.json
       📄 salestotals.json
       📄 inventory.txt
    📂 202

Per leggere ed elencare i nomi delle directory di primo livello, usare la funzione Directory.EnumerateDirectories.

IEnumerable<string> listOfDirectories = Directory.EnumerateDirectories("stores");

foreach (var dir in listOfDirectories) {
    Console.WriteLine(dir);
}

// Outputs:
// stores/201
// stores/202

Elencare i file in una directory specifica

Per elencare i nomi di tutti i file in una directory, è possibile usare la funzione Directory.EnumerateFiles.

IEnumerable<string> files = Directory.EnumerateFiles("stores");

foreach (var file in files)
{
    Console.WriteLine(file);
}

// Outputs:
// stores/totals.txt
// stores/sales.json

Elencare tutto il contenuto in una directory e in tutte le sottodirectory

Entrambe le funzioni Directory.EnumerateDirectories e Directory.EnumerateFiles hanno un overload che accetta un parametro per specificare i criteri di ricerca a cui i file e le directory devono corrispondere.

Hanno anche un altro overload che accetta un parametro per indicare se attraversare in modo ricorsivo una cartella specificata e tutte le relative sottocartelle.

// Find all *.txt files in the stores folder and its subfolders
IEnumerable<string> allFilesInAllFolders = Directory.EnumerateFiles("stores", "*.txt", SearchOption.AllDirectories);

foreach (var file in allFilesInAllFolders)
{
    Console.WriteLine(file);
}

// Outputs:
// stores/totals.txt
// stores/201/inventory.txt

Nell'esercizio successivo si userà la classe Directory per leggere in modo dinamico la directory principale stores di Tailwind Traders per trovare tutti i file sales.json.

Verificare le conoscenze

1.

Quale delle attività seguenti è possibile eseguire con Directory.EnumerateFiles?