Esercizio - Operare sul file system

Completato

È 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.

  1. Aprire Visual Studio Code.

  2. Nel menu principale selezionare Visualizza>Terminale per aprire una finestra terminale.

  3. (Facoltativo) Nella finestra terminale passare a una directory in cui si vuole copiare i file, ad esempio c:\MyProjects.

  4. 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
    
  5. Eseguire il comando seguente per creare un nuovo progetto console .NET:

    dotnet new console -f net8.0 -n mslearn-dotnet-files -o .
    
  6. 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.

    Screenshot che mostra la richiesta di Visual Studio che segnala all'utente che mancano alcuni elementi nel 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.

  7. Nella finestra Esplora, in mslearn-dotnet-files, espandere la cartella stores e ognuna delle cartelle numerate al suo interno.

    Screenshot della finestra Esplora che mostra la struttura di cartelle del progetto.

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

  1. Nella finestra Esplora selezionare il file Program.cs da aprire nell'editor.

    Screenshot della finestra Esplora risorse con evidenziato il file program.cs.

  2. Incollare il codice seguente nella prima riga del file Program.csper importare gli spazi dei nomi System.IO e System.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.

  1. 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;
    }
    
  2. Inserire il codice seguente sotto le istruzioni using per effettuare la chiamata alla funzione FindFiles. 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);
    }
    
  3. Premere CTRL+S o CMD+S in macOS per salvare il file Program.cs.

Eseguire il programma

  1. Immettere il comando seguente nella finestra del terminale per eseguire il programma:

    dotnet run
    
  2. 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;
}