Übung: Verwenden des Dateisystems

Abgeschlossen

Sie können mithilfe von .NET nach Informationen zu Dateien und Ordnern suchen und sie zurückgeben.

Tailwind Traders verfügt über viele physische Standorte auf der ganzen Welt. Jede Nacht erstellt die Filiale eine Datei namens sales.json, die den Gesamtumsatz für den aktuellen Tag enthält. Diese Dateien werden in Ordnern sortiert, die nach der Filial-ID benannt sind.

Hinweis

In diesem Modul wird die .NET-CLI (Befehlszeilenschnittstelle) und Visual Studio Code für die lokale Entwicklung verwendet. Nach Abschluss dieses Moduls können Sie die erlernten Konzepte in einer Entwicklungsumgebung wie Visual Studio (Windows) oder Visual Studio für Mac (macOS) anwenden oder die Entwicklung in Visual Studio Code (Windows, Linux und macOS) fortsetzen.

In diesem Modul wird das .NET 8.0 SDK verwendet. Stellen Sie sicher, dass .NET 8.0 installiert ist, indem Sie in Ihrem bevorzugten Befehlsterminal den folgenden Befehl ausführen:

dotnet --list-sdks

Die daraufhin angezeigte Ausgabe sieht in etwa wie im folgenden Beispiel aus:

6.0.317 [C:\Program Files\dotnet\sdk]
7.0.401 [C:\Program Files\dotnet\sdk]
8.0.100 [C:\Program Files\dotnet\sdk]

Stellen Sie sicher, dass eine Version aufgeführt wird, die mit 8 beginnt. Wenn nichts aufgeführt ist oder der Befehl nicht gefunden wurde, installieren Sie das neueste .NET 8.0 SDK.

Klonen des Projekts

In dieser Übung schreiben Sie ein .NET-Programm, das ein Verzeichnis und dessen Unterverzeichnisse nach Dateien mit dem Namen sales.json durchsucht.

Ein Startprojekt wurde bereits für Sie erstellt. Sie klonen es mithilfe des integrierten Terminals in Visual Studio Code.

  1. Öffnen Sie Visual Studio Code.

  2. Wählen Sie im Hauptmenü Ansicht>Terminal aus, um ein Terminalfenster zu öffnen.

  3. (Optional) Wechseln Sie im Terminalfenster zu einem Verzeichnis (z. B. c:\MyProjects), in das Sie die Dateien kopieren möchten.

  4. Führen Sie im Terminalfenster den folgenden Befehl aus, um das Startprojekt zu klonen und zum geklonten Projekt zu wechseln:

    git clone https://github.com/MicrosoftDocs/mslearn-dotnet-files && cd mslearn-dotnet-files
    
  5. Führen Sie den folgenden Befehl aus, um ein neues .NET-Konsolenprojekt zu erstellen:

    dotnet new console -f net8.0 -n mslearn-dotnet-files -o .
    
  6. Führen Sie den folgenden Befehl aus, um das neue .NET-Projekt in derselben Instanz von Visual Studio Code zu öffnen:

    code -a .
    

    Tipp

    An diesem Punkt könnte Visual Studio Code Sie ggf. darauf hinweisen, dass die erforderlichen Ressourcen zum Erstellen und Ausführen des Projekts fehlen.

    Screenshot der Visual Studio-Eingabeaufforderung, die Benutzer*innen darüber informiert, dass im Projekt etwas fehlt

    Wählen Sie das Dreieck mit dem Ausrufezeichen aus, und wählen Sie dann Terminal neu starten aus, um die Dateien hinzuzufügen, mit denen Visual Studio Code das Projekt ausführen und debuggen kann.

  7. Erweitern Sie im Explorerfenster unter mslearn-dotnet-files den Ordner stores und alle nummerierten Unterordner.

    Screenshot: Explorerfenster mit der Projektordnerstruktur.

Suchen nach den sales.json-Dateien

Die folgenden Tasks erstellen ein Programm, um alle sales.json-Dateien in allen Ordnern des Projekts mslearn-dotnet-files zu finden.

Einschließen des System.IO-Namespace

  1. Wählen Sie im Explorerfenster die Datei Program.cs aus, um sie im Editor zu öffnen.

    Screenshot: Fenster „EXPLORER“ mit hervorgehobener Datei „program.cs“

  2. Fügen Sie den folgenden Code in die erste Zeile der Datei Program.cs ein, um die Namespaces System.IO und System.Collections.Generic zu importieren:

    using System.IO;
    using System.Collections.Generic;
    

Hinweis

Ab .NET 6 werden die beiden Anweisungen im vorangehenden Code mithilfe der Eigenschaftengruppe ImplcitUsings automatisch in ein neues Projekt eingefügt. Da wir das Flag -f net8.0 beim Erstellen eines neuen Konsolenprojekts angegeben haben, werden sie implizit hinzugefügt. Wenn Sie jedoch mit einem älteren Projekt arbeiten, müssen sie in die Datei Program.cs aufgenommen werden, und es wirkt sich nicht auf dieses Projekt aus, wenn Sie sie in der Datei belassen.

Schreiben einer Funktion für die Suche nach den sales.json-Dateien

Erstellen Sie die neue Funktion FindFiles, die den Parameter folderName besitzt.

  1. Ersetzen Sie die Zeile Console.WriteLine("Hello, World!"); durch den folgenden Code:

    IEnumerable<string> FindFiles(string folderName)
    {
        List<string> salesFiles = new List<string>();
    
        var foundFiles = Directory.EnumerateFiles(folderName, "*", SearchOption.AllDirectories);
    
        foreach (var file in foundFiles)
        {
            // The file name will contain the full path, so only check the end of it
            if (file.EndsWith("sales.json"))
            {
                salesFiles.Add(file);
            }
        }
    
        return salesFiles;
    }
    
  2. Fügen Sie den folgenden Code unterhalb der using-Anweisungen ein, um die Funktion FindFiles aufzurufen. Dieser Code übergibt den Ordnernamen stores als Speicherort für die Dateisuche.

    var salesFiles = FindFiles("stores");
    
    foreach (var file in salesFiles)
    {
        Console.WriteLine(file);
    }
    
  3. Drücken Sie STRG+S (oder BEFEHL+S unter macOS), um die Datei Program.cs zu speichern.

Ausführen des Programms

  1. Geben Sie im Terminalfenster den folgenden Befehl ein, um das Programm auszuführen:

    dotnet run
    
  2. Das Programm sollte die folgende Ausgabe anzeigen:

    stores/sales.json
    stores/201/sales.json
    stores/202/sales.json
    stores/203/sales.json
    stores/204/sales.json
    

Hervorragend! Sie haben erfolgreich ein Befehlszeilenprogramm geschrieben, das alle Ordner im Verzeichnis stores durchläuft und alle gefundenen sales.json-Dateien auflistet.

In diesem Beispiel war der Pfad zum Verzeichnis stores recht einfach und befand sich innerhalb des Arbeitsverzeichnisses des Programms. Im nächsten Abschnitt erfahren Sie, wie Sie mit der Path-Klasse komplexe Strukturen erstellen, die betriebssystemübergreifend funktionieren.

Wissen Sie nicht weiter?

Wenn Probleme beim Ausführen des Programms aufgetreten sind, finden Sie hier den vollständigen Code für die Datei Program.cs. Ersetzen Sie den Inhalt Ihrer Datei Program.cs durch den folgenden Code:

var salesFiles = FindFiles("stores");
    
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)
    {
        // The file name will contain the full path, so only check the end of it
        if (file.EndsWith("sales.json"))
        {
            salesFiles.Add(file);
        }
    }

    return salesFiles;
}