Ćwiczenie — praca ze ścieżkami

Ukończone

Klasa .NET Path i Directory.GetCurrentDirectory są dwoma sposobami definiowania i redagowania ścieżek systemu plików.

W poprzednim ćwiczeniu napisałeś program, który iteruje za pośrednictwem folderu, aby znaleźć w nim dowolne pliki sales.json lub wszystkie podfoldery.

W tym ćwiczeniu użyjesz Path klasy i Directory.GetCurrentDirectory ulepszysz program, aby znaleźć dowolny plik z rozszerzeniem .json.

Używanie bieżącego katalogu i łączenie ścieżek

W bieżącym kodzie pliku Program.js przekazujesz statyczną lokalizację folderu stores. Teraz zmienimy ten kod tak, aby używał Directory.GetCurrentDirectory wartości zamiast przekazywać nazwę folderu statycznego.

  1. W edytorze wstaw następujący kod powyżej pierwszego wiersza Program.cs pliku. Ten kod używa Directory.GetCurrentDirectory metody , aby uzyskać ścieżkę dla bieżącego katalogu i zapisać ją w nowej zmiennej currentDirectory:

    var currentDirectory = Directory.GetCurrentDirectory();
    
  2. Wstaw następujący kod po właśnie dodanym wierszu. Ten kod używa Path.Combine metody , aby utworzyć pełną ścieżkę do katalogu stores i zapisać ją w nowej zmiennej storesDirectory:

    var storesDirectory = Path.Combine(currentDirectory, "stores");
    
  3. Zastąp ciąg stores w wywołaniu FindFiles funkcji nową zmienną storesDirectory:

    var salesFiles = FindFiles(storesDirectory);
    

    Górna część pliku powinna teraz wyglądać podobnie do poniższego fragmentu kodu:

    var currentDirectory = Directory.GetCurrentDirectory();
    var storesDirectory = Path.Combine(currentDirectory, "stores");
    var salesFiles = FindFiles(storesDirectory);
    
    foreach (var file in salesFiles)
    {
        Console.WriteLine(file);
    }
    
  4. Naciśnij Ctrl+S (lub Cmd+S macOS), aby zapisać plik.

  5. Uruchom program z wiersza polecenia:

    dotnet run
    
  6. Program powinien wyświetlić następujące dane wyjściowe:

    /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  
    

    Zwróć uwagę, że zwrócone nazwy plików zawierają pełną ścieżkę systemowa. Ta ścieżka jest uwzględniona, ponieważ Directory.GetCurrentDirectory metoda zwraca pełną ścieżkę do bieżącej lokalizacji.

Znajdowanie wszystkich plików JSON

Zamiast wyszukiwać tylko pliki sales.json , program musi wyszukać dowolny plik z rozszerzeniem .json. W tym celu możesz użyć Path.GetExtension metody , aby sprawdzić rozszerzenie dla każdego pliku.

  1. foreach W pętli, która iteruje przez foundFilesmetodę , wstaw następujący wiersz kodu powyżej if instrukcji , aby zdefiniować nową zmienną extension. Ten kod używa Path.GetExtension metody , aby uzyskać rozszerzenie każdego pliku.

        var extension = Path.GetExtension(file);
    
  2. Zmień instrukcję tak if , aby wyglądała jak poniższy wiersz kodu. Ta instrukcja sprawdza, czy rozszerzenie pliku jest równe .json.

           if (extension == ".json")
    

    Pętla foreach powinna wyglądać podobnie do następującego kodu:

    foreach (var file in foundFiles)
    {
        var extension = Path.GetExtension(file);
        if (extension == ".json")
        {
            salesFiles.Add(file);
        }
    }
    
  3. Naciśnij Ctrl+S / Cmd+S, aby zapisać plik.

  4. Uruchom program z wiersza polecenia:

    dotnet run
    

    Dane wyjściowe zawierają teraz wszystkie pliki .json w każdym z katalogów identyfikatorów sklepu:

    /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  
    

Dobra robota! Użyliśmy klasy Path i metody Directory.GetCurrentDirectory, aby program był znacznie bardziej niezawodny. W następnej lekcji dowiesz się, jak tworzyć katalogi i przenosić pliki między lokalizacjami.

Nie wiesz, co zrobić?

Jeśli w którymś miejscu tego ćwiczenia nie wiesz, co robić dalej, oto kompletny kod. Usuń wszystkie elementy w Program.cs i zastąp je następującym rozwiązaniem:

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