Cvičení – práce s cestami
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.
V editoru vložte následující kód nad první řádek
Program.cs
souboru. Tento kód používá metoduDirectory.GetCurrentDirectory
k získání cesty pro aktuální adresář a jeho uložení do nové proměnnécurrentDirectory
:var currentDirectory = Directory.GetCurrentDirectory();
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");
Nahraďte řetězec
stores
veFindFiles
volání funkce novou proměnnoustoresDirectory
: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); }
Stisknutím kombinace kláves Ctrl+S (nebo Cmd+S macOS) soubor uložte.
Spusťte program z příkazového řádku:
dotnet run
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ů.
foreach
Do smyčky, která iterujefoundFiles
, vložte následující řádek kódu nadif
příkaz definovat novou proměnnouextension
. Tento kód používá metoduPath.GetExtension
k získání přípony každého souboru.var extension = Path.GetExtension(file);
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); } }
Stisknutím kombinace kláves Ctrl+S / Cmd+S soubor uložte.
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;
}