Övning – Arbeta med sökvägar

Slutförd

.NET-klassen Path och Directory.GetCurrentDirectory är två sätt att definiera och skapa filsystemsökvägar.

I föregående övning skrev du ett program som itererar via en mapp för att hitta någon av de sales.json filerna i den eller eventuella undermappar.

I den här övningen Path använder du klassen och Directory.GetCurrentDirectory för att förbättra programmet så att alla filer med ett .json-tillägg hittas.

Använda den aktuella katalogen och kombinera sökvägar

I den aktuella Program.cs-koden skickar du den statiska platsen för mappen stores. Nu ska vi ändra koden så att den Directory.GetCurrentDirectory använder värdet i stället för att skicka ett statiskt mappnamn.

  1. I redigeraren infogar du följande kod ovanför den första Program.cs raden i filen. Den här koden använder Directory.GetCurrentDirectory metoden för att hämta sökvägen för den aktuella katalogen och lagra den i en ny variabel currentDirectory:

    var currentDirectory = Directory.GetCurrentDirectory();
    
  2. Infoga följande kod efter raden som du nyss lade till. Den här koden använder Path.Combine metoden för att skapa den fullständiga sökvägen till katalogen stores och lagra den i en ny variabel storesDirectory:

    var storesDirectory = Path.Combine(currentDirectory, "stores");
    
  3. Ersätt strängen stores i funktionsanropet FindFiles med den nya variabeln storesDirectory:

    var salesFiles = FindFiles(storesDirectory);
    

    Överst i filen bör nu se ut ungefär som följande kodfragment:

    var currentDirectory = Directory.GetCurrentDirectory();
    var storesDirectory = Path.Combine(currentDirectory, "stores");
    var salesFiles = FindFiles(storesDirectory);
    
    foreach (var file in salesFiles)
    {
        Console.WriteLine(file);
    }
    
  4. Spara filen genom att trycka på Ctrl+S (eller Cmd+S macOS).

  5. Kör programmet från kommandoraden:

    dotnet run
    
  6. Programmet bör visa följande 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  
    

    Observera att filnamnen som returneras innehåller den fullständiga systemsökvägen. Den här sökvägen ingår eftersom Directory.GetCurrentDirectory metoden returnerar den fullständiga sökvägen till den aktuella platsen.

Hitta alla .json-filer

I stället för att bara leta efter sales.json filer måste programmet söka efter alla filer med ett .json-tillägg. För att göra det kan du använda Path.GetExtension metoden för att kontrollera tillägget för varje fil.

  1. I loopen foreach som itererar genom foundFilesinfogar du följande kodrad ovanför -instruktionen if för att definiera en ny variabel extension. Den här koden använder Path.GetExtension metoden för att hämta tillägget för varje fil.

        var extension = Path.GetExtension(file);
    
  2. Ändra instruktionen if så att den ser ut som följande kodrad. Den här instruktionen kontrollerar om filens tillägg är lika med .json.

           if (extension == ".json")
    

    Loopen foreach bör se ut ungefär så här:

    foreach (var file in foundFiles)
    {
        var extension = Path.GetExtension(file);
        if (extension == ".json")
        {
            salesFiles.Add(file);
        }
    }
    
  3. Spara filen genom att trycka på Ctrl+S / Cmd+S.

  4. Kör programmet från kommandoraden:

    dotnet run
    

    Utdata visar nu alla .json filer i var och en av butiks-ID-katalogerna:

    /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  
    

Bra jobbat! Du har använt klassen Path och metoden Directory.GetCurrentDirectory för att göra programmet mer robust. I nästa lektion får du lära dig hur du skapar kataloger och flyttar filer mellan platser.

Har du fastnat?

Här är den färdiga koden om du skulle ha fastnat vid något ställe i övningen. Ta bort allt i Program.cs och ersätt det med den här 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;
}