Usare i percorsi di file in .NET

Completato

.NET offre un meccanismo predefinito per lavorare con i percorsi del file system.

Nell'esercizio precedente il numero di cartelle da analizzare non era eccessivo. Se si dispone di un file system con molti file e cartelle, la creazione manuale dei percorsi può risultare complessa. Fortunatamente, .NET fornisce alcune costanti e funzioni di utilità predefinite per semplificare la gestione dei percorsi di file.

In questa unità vengono fornite informazioni su alcune delle costanti e funzioni di utilità nello spazio dei nomi System.IO e sul tipo System.Environment in modo da rendere il programma più intelligente e più resiliente.

Determinazione della directory corrente

In alcuni casi, non si conosce la directory o il percorso in cui deve essere eseguito il programma. Si supponga di voler usare la directory corrente, ma di non conoscere il percorso.

.NET espone il percorso completo della directory corrente tramite il metodo Directory.GetCurrentDirectory.

Console.WriteLine(Directory.GetCurrentDirectory());

Se si esegue il codice precedente della cartella 201 nella struttura seguente, Directory.GetCurrentDirectory() restituisce stores\201:

📂 stores
    📂 201

Usare le directory speciali

È possibile eseguire .NET ovunque: in Windows, macOS, Linux e anche nei sistemi operativi per dispositivi mobili come iOS e Android. Ciascun sistema operativo potrebbe prevedere o meno il concetto di cartelle di sistema speciali (ad esempio una home directory dedicata a file specifici dell'utente o una directory in cui archiviare i file temporanei).

Questi tipi di directory speciali differiscono per ciascun sistema operativo. Può essere difficile cercare di ricordare la struttura di directory di ogni sistema operativo e usare le opzioni in base al sistema operativo corrente.

L'enumerazione System.Environment.SpecialFolder specifica le costanti per recuperare i percorsi delle cartelle di sistema speciali.

Il codice seguente restituisce il percorso per l'equivalente della cartella Windows Documenti o della directory HOME dell'utente per qualsiasi sistema operativo, anche se il codice è in esecuzione in Linux:

string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

Operare sui percorsi

I percorsi sono un'area di intervento frequente e .NET include una classe denominata Path specifica per lavorare con questi elementi.

La classe Path si trova nello spazio dei nomi System.IO di .NET e non è necessario installarla.

Caratteri speciali dei percorsi

Sistemi operativi diversi usano caratteri diversi per separare i livelli di directory.

Windows, ad esempio, usa la barra rovesciata (stores\201) e macOS usa la barra (stores/201).

Per consentire la scelta del carattere corretto, la classe Path contiene il campo DirectorySeparatorChar.

.NET interpreta automaticamente tale campo come carattere separatore applicabile al sistema operativo quando è necessario creare un percorso manualmente.

Console.WriteLine($"stores{Path.DirectorySeparatorChar}201");

// returns:
// stores\201 on Windows
//
// stores/201 on macOS

Unire i percorsi

La classe Path si basa sul concetto di percorsi di file e cartelle, che sono semplicemente stringhe. È possibile usare la classe Path per creare automaticamente i percorsi corretti per sistemi operativi specifici.

Per ottenere, ad esempio, il percorso della cartella stores/201, è possibile usare la funzione Path.Combine.

Console.WriteLine(Path.Combine("stores","201")); // outputs: stores/201

Tenere presente che si dovrebbe utilizzare la classe Path.Combine o Path.DirectorySeparatorChar invece di impostare le stringhe come hardcoded, poiché il programma può essere in esecuzione in molti sistemi operativi diversi. La classe Path formatta sempre i percorsi correttamente per il sistema operativo in cui il programma è in esecuzione.

Suggerimento

La classe Path non valuta se gli elementi esistono realmente. I percorsi sono concettuali, non fisici e la classe sta creando e analizzando le stringhe per conto dell'utente.

Determinare le estensioni dei nomi di file

La classe Path può anche indicare l'estensione di un nome file. Se si ha un file e si vuole sapere se si tratta di un file JSON, è possibile usare la funzione Path.GetExtension.

Console.WriteLine(Path.GetExtension("sales.json")); // outputs: .json

Scoprire tutte le informazioni necessarie su un file o un percorso

La classe Path contiene molti metodi diversi che eseguono varie operazioni. È possibile ottenere la maggior parte delle informazioni su una directory o un file usando rispettivamente le classi DirectoryInfo o FileInfo.

string fileName = $"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales{Path.DirectorySeparatorChar}sales.json";

FileInfo info = new FileInfo(fileName);

Console.WriteLine($"Full Name: {info.FullName}{Environment.NewLine}Directory: {info.Directory}{Environment.NewLine}Extension: {info.Extension}{Environment.NewLine}Create Date: {info.CreationTime}"); // And many more

Le classi Path, DirectoryInfo e FileInfo includono molti altri metodi di utilità e proprietà utili, ma questi concetti principali sono quelli che probabilmente verranno usati più spesso. Nell'esercizio successivo si comporranno i percorsi e si identificheranno i file JSON.