Esercizio - Operare sui percorsi
La classe .NET Path
e Directory.GetCurrentDirectory
sono due strumenti per definire e comporre percorsi del file system.
Nell'esercizio precedente è stato scritto un programma per scorrere il contenuto di una cartella e trovare eventuali file sales.json al suo interno o in una sottocartella.
In questo esercizio si usa la classe Path
e Directory.GetCurrentDirectory
per migliorare il programma in modo da trovare tutti i file con estensione json.
Usare la directory corrente e combinare i percorsi
Nel codice di Program.cs corrente viene passato il percorso statico della cartella stores. Adesso il codice verrà modificato in modo da usare il valore Directory.GetCurrentDirectory
anziché passare un nome di cartella statico.
Nell'editor inserire il codice seguente sopra la prima riga del file
Program.cs
. Questo codice usa il metodoDirectory.GetCurrentDirectory
per ottenere il percorso per la directory corrente e archiviarlo in una nuova variabilecurrentDirectory
:var currentDirectory = Directory.GetCurrentDirectory();
Inserire il codice seguente dopo la riga appena aggiunta. Questo codice usa il metodo
Path.Combine
per creare il percorso completo della directory stores e archiviarlo in una nuova variabilestoresDirectory
:var storesDirectory = Path.Combine(currentDirectory, "stores");
Sostituire la stringa
stores
nella chiamata di funzioneFindFiles
con la nuova variabilestoresDirectory
:var salesFiles = FindFiles(storesDirectory);
La parte superiore del file dovrebbe ora apparire come il frammento di codice seguente:
var currentDirectory = Directory.GetCurrentDirectory(); var storesDirectory = Path.Combine(currentDirectory, "stores"); var salesFiles = FindFiles(storesDirectory); foreach (var file in salesFiles) { Console.WriteLine(file); }
Premere CTRL+S o CMD+S in macOS per salvare il file.
Eseguire il programma dalla riga di comando:
dotnet run
Il programma dovrebbe visualizzare l'output seguente:
/home/username/dotnet-files/stores/sales.json /home/username/dotnet-files/stores/201/sales.json /home/username/dotnet-files/stores/202/sales.json /home/username/dotnet-files/stores/203/sales.json /home/username/dotnet-files/stores/204/sales.json
Si noti che i nomi file restituiti includono il percorso completo del sistema. Questo percorso è incluso perché il metodo
Directory.GetCurrentDirectory
restituisce il percorso completo della posizione corrente.
Trovare tutti i file con estensione json
Invece di cercare solo i file sales.json, questo programma deve cercare tutti i file con estensione json. A tale scopo, è possibile usare il metodo Path.GetExtension
per verificare l'estensione di ogni file.
Nel ciclo
foreach
che esegue l'iterazione tramitefoundFiles
inserire la riga di codice seguente sopra l'istruzioneif
per definire una nuova variabileextension
. Questo codice usa il metodoPath.GetExtension
per ottenere l'estensione di ogni file.var extension = Path.GetExtension(file);
Modificare l'istruzione
if
in modo che sia simile alla riga di codice seguente. Questa istruzione verifica se l'estensione del file è uguale a json.if (extension == ".json")
Il ciclo
foreach
dovrebbe essere simile al codice seguente:foreach (var file in foundFiles) { var extension = Path.GetExtension(file); if (extension == ".json") { salesFiles.Add(file); } }
Premere CTRL+S / CMD+S per salvare il file.
Eseguire il programma dalla riga di comando:
dotnet run
L'output mostra ora tutti i file con estensione json presenti in ognuna delle directory ID dell'archivio:
/home/username/dotnet-files/stores/sales.json /home/username/dotnet-files/stores/201/sales.json /home/username/dotnet-files/stores/201/salestotals.json /home/username/dotnet-files/stores/202/sales.json /home/username/dotnet-files/stores/202/salestotals.json /home/username/dotnet-files/stores/203/sales.json /home/username/dotnet-files/stores/203/salestotals.json /home/username/dotnet-files/stores/204/sales.json /home/username/dotnet-files/stores/204/salestotals.json
Fantastico! si è visto come usare la classe Path
e il metodo Directory.GetCurrentDirectory
per rendere il programma molto più efficace. Nella prossima unità si apprenderà come creare directory e spostare file tra i percorsi.
Se si riscontrano problemi
In caso di difficoltà a seguire l'esercizio in qualsiasi punto, di seguito è riportato il codice completo. Rimuovere tutto il contenuto in Program.cs e sostituirlo con questa soluzione:
var currentDirectory = Directory.GetCurrentDirectory();
var storesDirectory = Path.Combine(currentDirectory, "stores");
var salesFiles = FindFiles(storesDirectory);
foreach (var file in salesFiles)
{
Console.WriteLine(file);
}
IEnumerable<string> FindFiles(string folderName)
{
List<string> salesFiles = new List<string>();
var foundFiles = Directory.EnumerateFiles(folderName, "*", SearchOption.AllDirectories);
foreach (var file in foundFiles)
{
var extension = Path.GetExtension(file);
if (extension == ".json")
{
salesFiles.Add(file);
}
}
return salesFiles;
}