Übung: Arbeiten mit Pfaden
Die .NET-Klasse Path
und Directory.GetCurrentDirectory
sind zwei Möglichkeiten, Dateisystempfade zu definieren und zusammenzustellen.
In der vorherigen Übung haben Sie ein Programm geschrieben, das einen Ordner und seine Unterordner durchläuft, um alle darin befindlichen sales.json-Dateien zu finden.
In dieser Übung verwenden Sie die Path
-Klasse und Directory.GetCurrentDirectory
, um das Programm zu verbessern, damit es alle Dateien mit JSON-Erweiterung findet.
Verwenden des aktuellen Verzeichnisses und Kombinieren von Pfaden
Im aktuellen Code der Program.cs-Datei übergeben Sie den statischen Speicherort des Ordners stores. Der Code soll nun so geändert werden, dass der Directory.GetCurrentDirectory
-Wert verwendet wird, anstatt einen statischen Ordnernamen zu übergeben.
Fügen Sie im Editor den folgenden Code über der ersten Zeile der Datei
Program.cs
ein. Dieser Code verwendet die MethodeDirectory.GetCurrentDirectory
, um den Pfad für das aktuelle Verzeichnis abzurufen und in der neuen VariablencurrentDirectory
zu speichern:var currentDirectory = Directory.GetCurrentDirectory();
Fügen Sie den folgenden Code hinter der soeben hinzugefügten Zeile ein. Dieser Code verwendet die Methode
Path.Combine
, um den vollständigen Pfad für das Verzeichnis stores zu erstellen und in der neuen VariablenstoresDirectory
zu speichern:var storesDirectory = Path.Combine(currentDirectory, "stores");
Ersetzen Sie die Zeichenfolge
stores
imstoresDirectory
-Funktionsaufruf durch die neue VariableFindFiles
:var salesFiles = FindFiles(storesDirectory);
Der Anfang der Datei sollte nun in etwa wie im folgenden Codeausschnitt aussehen:
var currentDirectory = Directory.GetCurrentDirectory(); var storesDirectory = Path.Combine(currentDirectory, "stores"); var salesFiles = FindFiles(storesDirectory); foreach (var file in salesFiles) { Console.WriteLine(file); }
Drücken Sie STRG+S (oder BEFEHL+S unter macOS), um die Datei zu speichern.
Führen Sie das Programm über die Befehlszeile aus:
dotnet run
Das Programm sollte die folgende Ausgabe anzeigen:
/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
Beachten Sie, dass die zurückgegebenen Dateinamen den vollständigen Systempfad enthalten. Dieser Pfad ist enthalten, weil die
Directory.GetCurrentDirectory
-Methode den vollständigen Pfad zum aktuellen Speicherort zurückgibt.
Suche nach allen JSON-Dateien
Anstatt nur nach sales.json-Dateien zu suchen, muss dieses Programm nach allen Dateien mit JSON-Erweiterung suchen. Dazu können Sie die Path.GetExtension
Methode verwenden, um die Erweiterung für jede Datei zu überprüfen.
Fügen Sie in der
foreach
-Schleife, diefoundFiles
durchläuft, die folgende Codezeile über derif
-Anweisung hinzu, um die neue Variableextension
zu definieren. In diesem Code wird diePath.GetExtension
-Methode verwendet, um die Erweiterung jeder Datei abzurufen.var extension = Path.GetExtension(file);
Ändern Sie die
if
-Anweisung so, dass sie wie die folgende Codezeile aussieht. Diese Anweisung überprüft, ob die Erweiterung der Datei „.json“ lautet.if (extension == ".json")
Die
foreach
-Schleife sollte in etwa wie folgender Code aussehen:foreach (var file in foundFiles) { var extension = Path.GetExtension(file); if (extension == ".json") { salesFiles.Add(file); } }
Drücken Sie STRG+S / Befehlstaste+S, um die Datei zu speichern.
Führen Sie das Programm über die Befehlszeile aus:
dotnet run
Die Ausgabe zeigt nun alle JSON-Dateien, die in einem der nach Filial-ID aufgeteilten Verzeichnisse gespeichert sind:
/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
Gut gemacht! Sie haben die Path
-Klasse und die Directory.GetCurrentDirectory
-Methode verwendet, um das Programm deutlich stabiler zu gestalten. In der nächsten Einheit erfahren Sie, wie Sie Verzeichnisse erstellen und Dateien zwischen Speicherorten verschieben.
Wissen Sie nicht weiter?
Wenn Sie während dieser Übung Probleme hatten, finden Sie hier den vervollständigten Code. Ersetzen Sie alle Inhalte in Program.cs durch diese Lösung:
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;
}