Ćwiczenie — praca ze ścieżkami
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żyj bieżącego katalogu i połącz ścieżki
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.
W edytorze wstaw następujący kod powyżej pierwszego wiersza
Program.cspliku. Ten kod używaDirectory.GetCurrentDirectorymetody , aby uzyskać ścieżkę dla bieżącego katalogu i zapisać ją w nowej zmiennejcurrentDirectory:var currentDirectory = Directory.GetCurrentDirectory();Wstaw następujący kod po właśnie dodanym wierszu. Ten kod używa
Path.Combinemetody, aby utworzyć pełną ścieżkę do katalogu stores i przechować ją w nowej zmiennejstoresDirectory:var storesDirectory = Path.Combine(currentDirectory, "stores");Zastąp ciąg
storesw wywołaniuFindFilesfunkcji 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); }Naciśnij Ctrl+S (lub Cmd+S macOS), aby zapisać plik.
Uruchom program z wiersza polecenia:
dotnet runProgram 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.jsonZwróć uwagę, że zwrócone nazwy plików zawierają pełną ścieżkę systemowa. Ta ścieżka jest uwzględniona, ponieważ
Directory.GetCurrentDirectorymetoda 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.
foreachW pętli, która iteruje przezfoundFiles, wstaw następujący wiersz kodu powyżej instrukcjiif, aby zdefiniować nową zmiennąextension. Ten kod używaPath.GetExtensionmetody , aby uzyskać rozszerzenie każdego pliku.var extension = Path.GetExtension(file);Zmień instrukcję
if, aby wyglądała jak poniższa linia kodu. Ta instrukcja sprawdza, czy rozszerzenie pliku jest równe .json.if (extension == ".json")Pętla
foreachpowinna wyglądać podobnie do następującego kodu:foreach (var file in foundFiles) { var extension = Path.GetExtension(file); if (extension == ".json") { salesFiles.Add(file); } }Naciśnij Ctrl+S / Cmd+S, aby zapisać plik.
Uruchom program z wiersza polecenia:
dotnet runDane 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;
}