Esercizio - Operare sul file system
È possibile usare .NET per trovare e restituire informazioni su file e cartelle.
Tailwind Traders ha molti punti vendita fisici in tutto il mondo. Ogni notte ogni archivio crea un file denominato sales.json che contiene il totale di tutte le vendite di quel giorno. Questi file sono organizzati in cartelle denominate con l'ID del negozio.
Nota
In questo modulo vengono usati l'interfaccia della riga di comando di.NET e Visual Studio Code per lo sviluppo locale. Dopo aver completato il modulo, è possibile applicare i concetti appresi usando un ambiente di sviluppo come Visual Studio (Windows) o Visual Studio per Mac (macOS). In alternativa, è possibile continuare lo sviluppo con Visual Studio Code (Windows, Linux e macOS).
Questo modulo usa .NET 8.0 SDK. Assicurarsi di avere installato .NET 8.0 eseguendo il comando seguente nel terminale dei comandi preferito:
dotnet --list-sdks
Verrà visualizzato un output simile all'esempio seguente:
6.0.317 [C:\Program Files\dotnet\sdk]
7.0.401 [C:\Program Files\dotnet\sdk]
8.0.100 [C:\Program Files\dotnet\sdk]
Assicurarsi che sia elencata una versione che inizia con 8
. Se il comando non è presente nell'elenco o non viene trovato, installare la versione più recente di .NET 8.0 SDK.
Clonare il progetto
In questo esercizio si scrive un programma .NET che cerca in una directory e nelle relative sottodirectory i file denominati sales.json.
È già stato creato automaticamente un progetto iniziale. Viene clonato usando il terminale integrato in Visual Studio Code.
Aprire Visual Studio Code.
Nel menu principale selezionare Visualizza>Terminale per aprire una finestra terminale.
(Facoltativo) Nella finestra terminale passare a una directory in cui si vuole copiare i file, ad esempio
c:\MyProjects
.Nella finestra terminale eseguire il comando seguente per clonare il progetto iniziale e passare al progetto clonato:
git clone https://github.com/MicrosoftDocs/mslearn-dotnet-files && cd mslearn-dotnet-files
Eseguire il comando seguente per creare un nuovo progetto console .NET:
dotnet new console -f net8.0 -n mslearn-dotnet-files -o .
Eseguire il comando seguente per aprire il nuovo progetto .NET nella stessa istanza di Visual Studio Code:
code -a .
Suggerimento
A questo punto, Visual Studio Code potrebbe segnalare la mancanza di asset necessari per compilare ed eseguire il progetto.
Selezionare il triangolo con il punto esclamativo, quindi selezionare Relaunch terminal (Riavvia terminale) per aggiungere i file che consentono l'esecuzione di Visual Studio Code e il debug del progetto.
Nella finestra Esplora, in mslearn-dotnet-files, espandere la cartella stores e ognuna delle cartelle numerate al suo interno.
Trovare i file sales.json
Le attività seguenti creano un programma per trovare tutti i file sales.json in tutte le cartelle del progetto mslearn-dotnet-files
.
Includere lo spazio dei nomi System.IO
Nella finestra Esplora selezionare il file
Program.cs
da aprire nell'editor.Incollare il codice seguente nella prima riga del file
Program.cs
per importare gli spazi dei nomiSystem.IO
eSystem.Collections.Generic
:using System.IO; using System.Collections.Generic;
Nota
A partire dalla versione .NET 6, le due istruzioni nel codice precedente vengono incluse automaticamente in un nuovo progetto tramite il gruppo di proprietà ImplcitUsings
. Le istruzioni vengono aggiunte in modo implicito dal momento che durante la creazione di un nuovo progetto nella console è stato specificato il flag -f net8.0
. Tuttavia, se si lavora con un progetto precedente, queste devono essere incluse nel file Program.cs
e non influiscono su questo progetto se lasciate all'interno.
Scrivere una funzione per trovare i file sales.json
Creare una nuova funzione denominata FindFiles
che accetta un parametro folderName
.
Sostituire la riga Console.WriteLine("Hello, World!"); con il codice seguente:
IEnumerable<string> FindFiles(string folderName) { List<string> salesFiles = new List<string>(); var foundFiles = Directory.EnumerateFiles(folderName, "*", SearchOption.AllDirectories); foreach (var file in foundFiles) { // The file name will contain the full path, so only check the end of it if (file.EndsWith("sales.json")) { salesFiles.Add(file); } } return salesFiles; }
Inserire il codice seguente sotto le istruzioni
using
per effettuare la chiamata alla funzioneFindFiles
. Questo codice passa nel nome della cartella stores come percorso in cui cercare i file.var salesFiles = FindFiles("stores"); foreach (var file in salesFiles) { Console.WriteLine(file); }
Premere CTRL+S o CMD+S in macOS per salvare il file
Program.cs
.
Eseguire il programma
Immettere il comando seguente nella finestra del terminale per eseguire il programma:
dotnet run
Il programma dovrebbe visualizzare l'output seguente:
stores/sales.json stores/201/sales.json stores/202/sales.json stores/203/sales.json stores/204/sales.json
Ottimo. È stata completata con successo la scrittura di uno strumento da riga di comando che sfoglia tutte le cartelle nella directory stores
ed elenca tutti i file sales.json trovati.
In questo esempio il percorso della directory stores è piuttosto semplice e all'interno della directory di lavoro del programma. Nell'unità successiva si apprenderà come costruire strutture complesse che funzionano nei diversi sistemi operativi usando la classe Path
.
Se si riscontrano problemi
Se si verificano problemi durante l'esecuzione del programma, è possibile usare il codice completo per il file Program.cs
riportato di seguito. Sostituire il contenuto del file Program.cs
con il codice seguente:
var salesFiles = FindFiles("stores");
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)
{
// The file name will contain the full path, so only check the end of it
if (file.EndsWith("sales.json"))
{
salesFiles.Add(file);
}
}
return salesFiles;
}