Oefening: werken met paden
De .NET-klasse Path
en Directory.GetCurrentDirectory
zijn twee manieren om bestandssysteempaden te definiƫren en op te stellen.
In de vorige oefening hebt u een programma geschreven dat een map doorloopt om een van de sales.json bestanden erin of submappen te vinden.
In deze oefening gebruikt u de Path
klasse en Directory.GetCurrentDirectory
om het programma te verbeteren, zodat elk bestand met een .json-extensie wordt gevonden.
De huidige map gebruiken en paden combineren
In de huidige Program.cs-code geeft u de statische locatie van de stores-map door. Nu wijzigen we die code om de Directory.GetCurrentDirectory
waarde te gebruiken in plaats van een statische mapnaam door te geven.
Voeg in de editor de volgende code in boven de eerste regel van
Program.cs
het bestand. Deze code gebruikt deDirectory.GetCurrentDirectory
methode om het pad voor de huidige map te verkrijgen en op te slaan in een nieuwe variabelecurrentDirectory
:var currentDirectory = Directory.GetCurrentDirectory();
Voeg de volgende code in na de regel die u zojuist hebt toegevoegd. Deze code maakt gebruik van de
Path.Combine
methode om het volledige pad naar de archiefmap te maken en op te slaan in een nieuwe variabelestoresDirectory
:var storesDirectory = Path.Combine(currentDirectory, "stores");
Vervang de tekenreeks
stores
in deFindFiles
functie-aanroep door de nieuwe variabelestoresDirectory
:var salesFiles = FindFiles(storesDirectory);
De bovenkant van het bestand moet er nu uitzien zoals in het volgende fragment:
var currentDirectory = Directory.GetCurrentDirectory(); var storesDirectory = Path.Combine(currentDirectory, "stores"); var salesFiles = FindFiles(storesDirectory); foreach (var file in salesFiles) { Console.WriteLine(file); }
Druk op Ctrl+S (of Cmd+S macOS) om het bestand op te slaan.
Voer het programma uit vanaf de opdrachtregel:
dotnet run
In het programma moet de volgende uitvoer worden weergegeven:
/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
U ziet dat de geretourneerde bestandsnamen het volledige systeempad bevatten. Dit pad is opgenomen omdat
Directory.GetCurrentDirectory
de methode het volledige pad naar de huidige locatie retourneert.
Alle .json-bestanden zoeken
In plaats van alleen sales.json bestanden te zoeken, moet het programma zoeken naar een bestand met een .json extensie. Hiervoor kunt u de Path.GetExtension
methode gebruiken om de extensie voor elk bestand te controleren.
Voeg in de
foreach
lus diefoundFiles
doorloopt, de volgende coderegel boven deif
instructie in om een nieuwe variabeleextension
te definiƫren. Deze code gebruikt dePath.GetExtension
methode om de extensie van elk bestand op te halen.var extension = Path.GetExtension(file);
Wijzig de
if
instructie zodat deze eruitziet als de volgende coderegel. Met deze instructie wordt gecontroleerd of de extensie van het bestand gelijk is aan .json.if (extension == ".json")
De
foreach
lus moet er ongeveer uitzien als de volgende code:foreach (var file in foundFiles) { var extension = Path.GetExtension(file); if (extension == ".json") { salesFiles.Add(file); } }
Druk op Ctrl+S / Cmd+S om het bestand op te slaan.
Voer het programma uit vanaf de opdrachtregel:
dotnet run
In de uitvoer worden nu alle .json bestanden in elk van de store-id-mappen weergegeven:
/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
Helemaal goed! U hebt de Path
-klasse en Directory.GetCurrentDirectory
-methode gebruikt om het programma veel robuuster te maken. In de volgende les leert u directory's te maken en bestanden tussen locaties te verplaatsen.
Vastgelopen?
Als u op een bepaald punt in deze oefening niet meer verder kunt, vindt u hier de voltooide code. Verwijder alles in Program.cs en vervang deze door deze oplossing:
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;
}