Cvičení – práce s cestami

Dokončeno

Třída .NET Path a Directory.GetCurrentDirectory jsou dvěma způsoby, jak definovat a vytvářet cesty k systému souborů.

V předchozím cvičení jste napsali program, který iteruje prostřednictvím složky a najde v něm libovolný sales.json soubory nebo jakékoli podsložky.

V tomto cvičení použijete Path třídu a Directory.GetCurrentDirectory program vylepšíte tak, aby našel jakýkoli soubor s příponou .json.

Použití aktuálního adresáře a kombinování cest

V aktuálním kódu souboru Program.cs předáváte statické umístění složky stores. Teď tento kód změníme tak, aby místo předání názvu statické složky používal Directory.GetCurrentDirectory hodnotu.

  1. V editoru vložte následující kód nad první řádek Program.cs souboru. Tento kód používá metodu Directory.GetCurrentDirectory k získání cesty pro aktuální adresář a jeho uložení do nové proměnné currentDirectory:

    var currentDirectory = Directory.GetCurrentDirectory();
    
  2. Za řádek, který jste právě přidali, vložte následující kód. Tento kód pomocí Path.Combine metody vytvoří úplnou cestu k adresáři stores a uloží ji do nové proměnné storesDirectory:

    var storesDirectory = Path.Combine(currentDirectory, "stores");
    
  3. Nahraďte řetězec stores ve FindFiles volání funkce novou proměnnou storesDirectory:

    var salesFiles = FindFiles(storesDirectory);
    

    Horní část souboru by teď měla vypadat podobně jako v následujícím fragmentu kódu:

    var currentDirectory = Directory.GetCurrentDirectory();
    var storesDirectory = Path.Combine(currentDirectory, "stores");
    var salesFiles = FindFiles(storesDirectory);
    
    foreach (var file in salesFiles)
    {
        Console.WriteLine(file);
    }
    
  4. Stisknutím kombinace kláves Ctrl+S (nebo Cmd+S macOS) soubor uložte.

  5. Spusťte program z příkazového řádku:

    dotnet run
    
  6. Program by měl zobrazit následující výstup:

    /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  
    

    Všimněte si, že vrácené názvy souborů zahrnují úplnou systémovou cestu. Tato cesta je zahrnuta, protože Directory.GetCurrentDirectory metoda vrátí úplnou cestu k aktuálnímu umístění.

Nalezení všech souborů .json

Místo hledání pouze sales.json souborů musí program hledat jakýkoli soubor s příponou .json. K tomu můžete použít metodu Path.GetExtension ke kontrole přípony jednotlivých souborů.

  1. foreach Do smyčky, která iteruje foundFiles, vložte následující řádek kódu nad if příkaz definovat novou proměnnou extension. Tento kód používá metodu Path.GetExtension k získání přípony každého souboru.

        var extension = Path.GetExtension(file);
    
  2. if Změňte příkaz tak, aby vypadal jako na následujícím řádku kódu. Tento příkaz zkontroluje, zda je přípona souboru rovna .json.

           if (extension == ".json")
    

    Smyčka foreach by měla vypadat podobně jako v následujícím kódu:

    foreach (var file in foundFiles)
    {
        var extension = Path.GetExtension(file);
        if (extension == ".json")
        {
            salesFiles.Add(file);
        }
    }
    
  3. Stisknutím kombinace kláves Ctrl+S / Cmd+S soubor uložte.

  4. Spusťte program z příkazového řádku:

    dotnet run
    

    Výstup teď zobrazuje všechny soubory .json v každém adresáři ID úložiště:

    /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  
    

Skvělá práce! Díky třídě Path a metodě Directory.GetCurrentDirectory je program mnohem robustnější. V další lekci se dozvíte, jak vytvářet adresáře a přesouvat soubory mezi umístěními.

Zasekli jste se?

Pokud jste v jakémkoli bodě tohoto cvičení zasekli, zde najdete hotový kód. Odeberte všechno v Program.cs a nahraďte ho tímto řešením:

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