Übung: Arbeiten mit Pfaden

Abgeschlossen

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.

  1. Fügen Sie im Editor den folgenden Code über der ersten Zeile der Datei Program.cs ein. Dieser Code verwendet die Methode Directory.GetCurrentDirectory, um den Pfad für das aktuelle Verzeichnis abzurufen und in der neuen Variablen currentDirectory zu speichern:

    var currentDirectory = Directory.GetCurrentDirectory();
    
  2. Fügen Sie den folgenden Code nach dem soeben hinzugefügten Code ein. Dieser Code verwendet die Methode Path.Combine, um den vollständigen Pfad für das Verzeichnis stores zu erstellen und in der neuen Variablen storesDirectory zu speichern:

    var storesDirectory = Path.Combine(currentDirectory, "stores");
    
  3. Ersetzen Sie die Zeichenfolge stores im storesDirectory-Funktionsaufruf durch die neue Variable FindFiles:

    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);
    }
    
  4. Drücken Sie STRG+S (oder BEFEHL+S unter macOS), um die Datei zu speichern.

  5. Führen Sie das Programm über die Befehlszeile aus:

    dotnet run
    
  6. 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.

  1. Fügen Sie in der foreach-Schleife, die foundFiles durchläuft, die folgende Codezeile über der if-Anweisung hinzu, um die neue Variable extension zu definieren. In diesem Code wird die Path.GetExtension-Methode verwendet, um die Erweiterung jeder Datei abzurufen.

        var extension = Path.GetExtension(file);
    
  2. Ä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);
        }
    }
    
  3. Drücken Sie STRG+S / Befehlstaste+S, um die Datei zu speichern.

  4. 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;
}