Øvelse – Arbeide med baner

Fullført

.NET Path-klassen og Directory.GetCurrentDirectory er to måter å definere og skrive filsystembaner på.

I den forrige øvelsen skrev du et program som itererer gjennom en mappe for å finne noen av sales.json filene i den eller eventuelle undermapper.

I denne øvelsen bruker du Path klassen og Directory.GetCurrentDirectory til å forbedre programmet slik at den finner fil med en .json filtype.

Bruk gjeldende katalog og kombiner baner

I gjeldende Program.cs kode sender du den statiske plasseringen til lagrer-mappen. Nå endrer vi denne koden til å bruke Directory.GetCurrentDirectory-verdien i stedet for å sende et statisk mappenavn.

  1. Sett inn følgende kode over den første linjen i Program.cs filen i redigeringsprogrammet. Denne koden bruker metoden Directory.GetCurrentDirectory til å hente banen for gjeldende katalog og lagre den i en ny variabel currentDirectory:

    var currentDirectory = Directory.GetCurrentDirectory();
    
  2. Sett inn følgende kode etter linjen du nettopp la til. Denne koden bruker Path.Combine til å opprette den fullstendige banen til lagrer katalogen og lagrer den i en ny variabel storesDirectory:

    var storesDirectory = Path.Combine(currentDirectory, "stores");
    
  3. Erstatt strengen stores i FindFiles funksjonskallet med den nye variabelen storesDirectory:

    var salesFiles = FindFiles(storesDirectory);
    

    Toppen av filen skal nå se ut som følgende kodesnutt:

    var currentDirectory = Directory.GetCurrentDirectory();
    var storesDirectory = Path.Combine(currentDirectory, "stores");
    var salesFiles = FindFiles(storesDirectory);
    
    foreach (var file in salesFiles)
    {
        Console.WriteLine(file);
    }
    
  4. Trykk CTRL+S (eller Cmd+S macOS) for å lagre filen.

  5. Kjør programmet fra kommandolinjen:

    dotnet run
    
  6. Programmet skal vise følgende utdata:

    /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  
    

    Legg merke til at de returnerte filnavnene inkluderer den fullstendige systembanen. Denne banen er inkludert fordi Directory.GetCurrentDirectory metoden returnerer den fullstendige banen til gjeldende plassering.

Finne alle .json filer

I stedet for å lete etter bare sales.json filer, må programmet søke etter en fil med en .json filtype. Hvis du vil gjøre dette, kan du bruke Path.GetExtension til å kontrollere filtypen for hver fil.

  1. I foreach løkke som gjentas gjennom foundFiles, setter du inn følgende kodelinje over if-setningen for å definere en ny variabel extension. Denne koden bruker Path.GetExtension metoden for å hente filtypen til hver fil.

        var extension = Path.GetExtension(file);
    
  2. Endre if-setningen slik at den ser ut som følgende kodelinje. Denne setningen kontrollerer om filtypen er lik .json.

           if (extension == ".json")
    

    Den foreach løkken skal se ut som følgende kode:

    foreach (var file in foundFiles)
    {
        var extension = Path.GetExtension(file);
        if (extension == ".json")
        {
            salesFiles.Add(file);
        }
    }
    
  3. Trykk CTRL+S / Cmd+S for å lagre filen.

  4. Kjør programmet fra kommandolinjen:

    dotnet run
    

    Utdataene viser nå alle .json filer i hver av butikk-ID-katalogene:

    /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  
    

Flott jobb! Du har brukt Path klasse og Directory.GetCurrentDirectory metode for å gjøre programmet mye mer robust. I neste enhet lærer du hvordan du oppretter kataloger og flytter filer mellom plasseringer.

Ble du sittende fast?

Hvis du ble sittende fast når som helst i denne øvelsen, her er den fullførte koden. Fjern alt i Program.cs og erstatt det med denne løsningen:

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