Gyakorlat – Útvonalak használata
A .NET-osztály Path
Directory.GetCurrentDirectory
két módszer a fájlrendszer elérési útjának meghatározására és írására.
Az előző gyakorlatban egy olyan programot írt, amely egy mappán keresztül halad végig, és megkeresi a benne lévő sales.json fájlokat vagy almappákat.
Ebben a gyakorlatban az Path
osztályt használja, és Directory.GetCurrentDirectory
fejleszti a programot, hogy megtalálja a .json kiterjesztésű fájlokat.
Az aktuális könyvtár használata és az elérési utak egyesítése
Az Program.cs jelenlegi kódjában a stores mappa statikus helyét adja meg. Most úgy módosítjuk ezt a kódot, hogy statikus mappanév helyett az Directory.GetCurrentDirectory
értéket használja.
A szerkesztőbe szúrja be a következő kódot a fájl első sora
Program.cs
fölé. Ez a kód azDirectory.GetCurrentDirectory
aktuális könyvtár elérési útjának lekérésére és egy új változóbancurrentDirectory
való tárolására használja a metódust:var currentDirectory = Directory.GetCurrentDirectory();
Szúrja be a következő kódot az imént hozzáadott kód után. Ez a kód a
Path.Combine
metódus használatával hozza létre a tárolókönyvtár teljes elérési útját, és egy új változóbanstoresDirectory
tárolja:var storesDirectory = Path.Combine(currentDirectory, "stores");
Cserélje le a függvényhívás sztringét
stores
FindFiles
az új változórastoresDirectory
:var salesFiles = FindFiles(storesDirectory);
A fájl tetejének a következő kódrészlethez hasonlóan kell kinéznie:
var currentDirectory = Directory.GetCurrentDirectory(); var storesDirectory = Path.Combine(currentDirectory, "stores"); var salesFiles = FindFiles(storesDirectory); foreach (var file in salesFiles) { Console.WriteLine(file); }
A fájl mentéséhez nyomja le a Ctrl+S (vagy Cmd+S macOS) billentyűkombinációt.
Futtassa a programot a parancssorból:
dotnet run
A programnak a következő kimenetet kell megjelenítenie:
/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
Figyelje meg, hogy a visszaadott fájlnevek tartalmazzák a teljes rendszer elérési útját. Ez az elérési út azért van benne, mert
Directory.GetCurrentDirectory
a metódus a teljes elérési utat adja vissza az aktuális helyre.
Az összes .json-fájl megkeresése
Ahelyett, hogy csak sales.json fájlokat keresne, a programnak .json kiterjesztésű fájlokat kell keresnie. Ehhez a Path.GetExtension
módszerrel ellenőrizheti az egyes fájlok bővítményét.
foreach
Az átvezetettfoundFiles
hurokba szúrja be a következő kódsort azif
utasítás fölé egy új változóextension
definiálásához. Ez a kód azPath.GetExtension
egyes fájlok bővítményének lekérésére használja a metódust.var extension = Path.GetExtension(file);
Módosítsa az utasítást
if
úgy, hogy az a következő kódsorhoz hasonlóan nézzen ki. Ez az utasítás ellenőrzi, hogy a fájl kiterjesztése megegyezik-e a .json kiterjesztéssel.if (extension == ".json")
A
foreach
ciklusnak a következő kódhoz hasonlóan kell kinéznie:foreach (var file in foundFiles) { var extension = Path.GetExtension(file); if (extension == ".json") { salesFiles.Add(file); } }
A fájl mentéséhez nyomja le a Ctrl+S / Cmd+S billentyűkombinációt.
Futtassa a programot a parancssorból:
dotnet run
A kimenet most az összes .json fájlt megjeleníti az egyes tárolóazonosító-könyvtárakban:
/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
Szép munka! A Path
osztállyal és a Directory.GetCurrentDirectory
metódussal jelentősen robusztusabbá tette a programot. A következő leckéből megtudhatja, hogyan hozhat létre könyvtárakat, valamint hogyan helyezhet át fájlokat helyek között.
Elakadt?
Ha a gyakorlat bármely pontján elakadt, itt megtekintheti a kész kódot. Távolítsa el mindent a Program.cs fájlból, és cserélje le erre a megoldásra:
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;
}