Esercizio - Operare sui percorsi

Completato

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.

  1. Nell'editor inserire il codice seguente sopra la prima riga del file Program.cs. Questo codice usa il metodo Directory.GetCurrentDirectory per ottenere il percorso per la directory corrente e archiviarlo in una nuova variabile currentDirectory:

    var currentDirectory = Directory.GetCurrentDirectory();
    
  2. 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 variabile storesDirectory:

    var storesDirectory = Path.Combine(currentDirectory, "stores");
    
  3. Sostituire la stringa stores nella chiamata di funzione FindFiles con la nuova variabile storesDirectory:

    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);
    }
    
  4. Premere CTRL+S o CMD+S in macOS per salvare il file.

  5. Eseguire il programma dalla riga di comando:

    dotnet run
    
  6. 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.

  1. Nel ciclo foreach che esegue l'iterazione tramite foundFiles inserire la riga di codice seguente sopra l'istruzione if per definire una nuova variabile extension. Questo codice usa il metodo Path.GetExtension per ottenere l'estensione di ogni file.

        var extension = Path.GetExtension(file);
    
  2. 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);
        }
    }
    
  3. Premere CTRL+S / CMD+S per salvare il file.

  4. 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;
}