Øvelse – Arbeide med baner
.NET Path-klassen og Directory.GetCurrentDirectory er to måter å definere og skrive filsystembaner på.
I den forrige øvelsen skrev du et program som itererer gjennom en mappe for å finne noen av sales.json filene i den eller eventuelle undermapper.
I denne øvelsen bruker du Path klassen og Directory.GetCurrentDirectory til å forbedre programmet slik at den finner fil med en .json filtype.
Bruk gjeldende katalog og kombiner baner
I gjeldende Program.cs kode sender du den statiske plasseringen til lagrer-mappen. Nå endrer vi denne koden til å bruke Directory.GetCurrentDirectory-verdien i stedet for å sende et statisk mappenavn.
Sett inn følgende kode over den første linjen i
Program.csfilen i redigeringsprogrammet. Denne koden bruker metodenDirectory.GetCurrentDirectorytil å hente banen for gjeldende katalog og lagre den i en ny variabelcurrentDirectory:var currentDirectory = Directory.GetCurrentDirectory();Sett inn følgende kode etter linjen du nettopp la til. Denne koden bruker
Path.Combinetil å opprette den fullstendige banen til lagrer katalogen og lagrer den i en ny variabelstoresDirectory:var storesDirectory = Path.Combine(currentDirectory, "stores");Erstatt strengen
storesiFindFilesfunksjonskallet med den nye variabelenstoresDirectory:var salesFiles = FindFiles(storesDirectory);Toppen av filen skal nå se ut som følgende kodesnutt:
var currentDirectory = Directory.GetCurrentDirectory(); var storesDirectory = Path.Combine(currentDirectory, "stores"); var salesFiles = FindFiles(storesDirectory); foreach (var file in salesFiles) { Console.WriteLine(file); }Trykk CTRL+S (eller Cmd+S macOS) for å lagre filen.
Kjør programmet fra kommandolinjen:
dotnet runProgrammet skal vise følgende utdata:
/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.jsonLegg merke til at de returnerte filnavnene inkluderer den fullstendige systembanen. Denne banen er inkludert fordi
Directory.GetCurrentDirectorymetoden returnerer den fullstendige banen til gjeldende plassering.
Finne alle .json filer
I stedet for å lete etter bare sales.json filer, må programmet søke etter en fil med en .json filtype. Hvis du vil gjøre dette, kan du bruke Path.GetExtension til å kontrollere filtypen for hver fil.
I
foreachløkke som gjentas gjennomfoundFiles, setter du inn følgende kodelinje overif-setningen for å definere en ny variabelextension. Denne koden brukerPath.GetExtensionmetoden for å hente filtypen til hver fil.var extension = Path.GetExtension(file);Endre
if-setningen slik at den ser ut som følgende kodelinje. Denne setningen kontrollerer om filtypen er lik .json.if (extension == ".json")Den
foreachløkken skal se ut som følgende kode:foreach (var file in foundFiles) { var extension = Path.GetExtension(file); if (extension == ".json") { salesFiles.Add(file); } }Trykk CTRL+S / Cmd+S for å lagre filen.
Kjør programmet fra kommandolinjen:
dotnet runUtdataene viser nå alle .json filer i hver av butikk-ID-katalogene:
/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
Flott jobb! Du har brukt Path klasse og Directory.GetCurrentDirectory metode for å gjøre programmet mye mer robust. I neste enhet lærer du hvordan du oppretter kataloger og flytter filer mellom plasseringer.
Ble du sittende fast?
Hvis du ble sittende fast når som helst i denne øvelsen, her er den fullførte koden. Fjern alt i Program.cs og erstatt det med denne løsningen:
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;
}