Usare i percorsi di file in .NET
.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.