Oefening: werken met paden

Voltooid

De .NET-klasse Path en Directory.GetCurrentDirectory zijn twee manieren om bestandssysteempaden te definiƫren en op te stellen.

In de vorige oefening hebt u een programma geschreven dat een map doorloopt om een van de sales.json bestanden erin of submappen te vinden.

In deze oefening gebruikt u de Path klasse en Directory.GetCurrentDirectory om het programma te verbeteren, zodat elk bestand met een .json-extensie wordt gevonden.

De huidige map gebruiken en paden combineren

In de huidige Program.cs-code geeft u de statische locatie van de stores-map door. Nu wijzigen we die code om de Directory.GetCurrentDirectory waarde te gebruiken in plaats van een statische mapnaam door te geven.

  1. Voeg in de editor de volgende code in boven de eerste regel van Program.cs het bestand. Deze code gebruikt de Directory.GetCurrentDirectory methode om het pad voor de huidige map te verkrijgen en op te slaan in een nieuwe variabele currentDirectory:

    var currentDirectory = Directory.GetCurrentDirectory();
    
  2. Voeg de volgende code in na de regel die u zojuist hebt toegevoegd. Deze code maakt gebruik van de Path.Combine methode om het volledige pad naar de archiefmap te maken en op te slaan in een nieuwe variabele storesDirectory:

    var storesDirectory = Path.Combine(currentDirectory, "stores");
    
  3. Vervang de tekenreeks stores in de FindFiles functie-aanroep door de nieuwe variabele storesDirectory:

    var salesFiles = FindFiles(storesDirectory);
    

    De bovenkant van het bestand moet er nu uitzien zoals in het volgende fragment:

    var currentDirectory = Directory.GetCurrentDirectory();
    var storesDirectory = Path.Combine(currentDirectory, "stores");
    var salesFiles = FindFiles(storesDirectory);
    
    foreach (var file in salesFiles)
    {
        Console.WriteLine(file);
    }
    
  4. Druk op Ctrl+S (of Cmd+S macOS) om het bestand op te slaan.

  5. Voer het programma uit vanaf de opdrachtregel:

    dotnet run
    
  6. In het programma moet de volgende uitvoer worden weergegeven:

    /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  
    

    U ziet dat de geretourneerde bestandsnamen het volledige systeempad bevatten. Dit pad is opgenomen omdat Directory.GetCurrentDirectory de methode het volledige pad naar de huidige locatie retourneert.

Alle .json-bestanden zoeken

In plaats van alleen sales.json bestanden te zoeken, moet het programma zoeken naar een bestand met een .json extensie. Hiervoor kunt u de Path.GetExtension methode gebruiken om de extensie voor elk bestand te controleren.

  1. Voeg in de foreach lus die foundFilesdoorloopt, de volgende coderegel boven de if instructie in om een nieuwe variabele extensionte definiƫren. Deze code gebruikt de Path.GetExtension methode om de extensie van elk bestand op te halen.

        var extension = Path.GetExtension(file);
    
  2. Wijzig de if instructie zodat deze eruitziet als de volgende coderegel. Met deze instructie wordt gecontroleerd of de extensie van het bestand gelijk is aan .json.

           if (extension == ".json")
    

    De foreach lus moet er ongeveer uitzien als de volgende code:

    foreach (var file in foundFiles)
    {
        var extension = Path.GetExtension(file);
        if (extension == ".json")
        {
            salesFiles.Add(file);
        }
    }
    
  3. Druk op Ctrl+S / Cmd+S om het bestand op te slaan.

  4. Voer het programma uit vanaf de opdrachtregel:

    dotnet run
    

    In de uitvoer worden nu alle .json bestanden in elk van de store-id-mappen weergegeven:

    /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  
    

Helemaal goed! U hebt de Path-klasse en Directory.GetCurrentDirectory-methode gebruikt om het programma veel robuuster te maken. In de volgende les leert u directory's te maken en bestanden tussen locaties te verplaatsen.

Vastgelopen?

Als u op een bepaald punt in deze oefening niet meer verder kunt, vindt u hier de voltooide code. Verwijder alles in Program.cs en vervang deze door deze oplossing:

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