Übung: Verwenden des Dateisystems
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.
Öffnen Sie Visual Studio Code.
Wählen Sie im Hauptmenü Ansicht>Terminal aus, um ein Terminalfenster zu öffnen.
(Optional) Wechseln Sie im Terminalfenster zu einem Verzeichnis (z. B.
c:\MyProjects
), in das Sie die Dateien kopieren möchten.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
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 .
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.
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.
Erweitern Sie im Explorerfenster unter mslearn-dotnet-files den Ordner stores und alle nummerierten Unterordner.
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
Wählen Sie im Explorerfenster die Datei
Program.cs
aus, um sie im Editor zu öffnen.Fügen Sie den folgenden Code in die erste Zeile der Datei
Program.cs
ein, um die NamespacesSystem.IO
undSystem.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.
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; }
Fügen Sie den folgenden Code unterhalb der
using
-Anweisungen ein, um die FunktionFindFiles
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); }
Drücken Sie STRG+S (oder BEFEHL+S unter macOS), um die Datei
Program.cs
zu speichern.
Ausführen des Programms
Geben Sie im Terminalfenster den folgenden Befehl ein, um das Programm auszuführen:
dotnet run
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;
}