Verwenden des Dateisystems

Abgeschlossen

.NET enthält integrierte Typen für die Arbeit mit dem Dateisystem, die im Namespace System.IO enthalten sind.

Hier erfahren Sie, wie Sie die in System.IO verfügbaren Typen mithilfe von C# verwenden können, um ein Dateisystem zu lesen und Dateien und Verzeichnisse zu ermitteln.

Szenario

Große Einzelhändler schreiben Daten oft in Dateien, damit sie später in Batches verarbeitet werden können.

Bei Tailwind Traders die Gesamtumsatzzahlen der einzelnen Filialen jeweils in eine Datei geschrieben. Diese Datei wird dann an einen zentralen Speicherort gesendet. Damit diese Dateien verwendet werden können, muss das Unternehmen einen Batchprozess etablieren, der mit dem Dateisystem zusammenarbeiten kann.

Einschließen des System.IO-Namespace

Der Namespace „System.IO“ enthält integrierte Typen, die die Interaktion mit Dateien und Verzeichnissen ermöglichen. Sie können z. B. Datei- und Verzeichnissammlungen basierend auf Suchkriterien abrufen und get- und set-Eigenschaften für Dateien und Verzeichnisse erstellen. Sie können auch die Typen im Namespace System.IO verwenden, um Datenströme und Dateien synchron und asynchron zu lesen und zu schreiben.

Konzentrieren Sie sich zunächst auf die Informationen, die Sie benötigen, um mithilfe der Directory-Klasse im System.IO-Namespace mit Verzeichnissen arbeiten zu können. Die Klasse „Directory“ macht statische Methoden zum Erstellen, Verschieben und Aufzählen in Verzeichnissen und Unterverzeichnissen verfügbar.

Auflisten aller Verzeichnisse

Die Directory-Klasse wird häufig verwendet, um Verzeichnisse aufzulisten (oder zu enumerieren). Die Tailwind Traders-Dateistruktur hat beispielsweise einen Stammordner namens stores. In diesem Ordner befinden sich Unterordner, die nach Filialnummer organisiert sind, und in diesen Ordnern befinden sich wiederum die Dateien „sales-total“ (Gesamtumsatz) und „inventory“ (Bestand). Die Struktur ähnelt dem folgenden Beispiel:

📂 stores
    📄 sales.json
    📄 totals.txt
    📂 201
       📄 sales.json
       📄 salestotals.json
       📄 inventory.txt
    📂 202

Um die Namen der Verzeichnisse der obersten Ebene zu lesen und aufzulisten, können Sie die Directory.EnumerateDirectories-Funktion verwenden.

IEnumerable<string> listOfDirectories = Directory.EnumerateDirectories("stores");

foreach (var dir in listOfDirectories) {
    Console.WriteLine(dir);
}

// Outputs:
// stores/201
// stores/202

Auflisten von Dateien in einem bestimmten Verzeichnis

Zum Auflisten der Namen aller Dateien in einem Verzeichnis verwenden Sie die Directory.EnumerateFiles-Funktion.

IEnumerable<string> files = Directory.EnumerateFiles("stores");

foreach (var file in files)
{
    Console.WriteLine(file);
}

// Outputs:
// stores/totals.txt
// stores/sales.json

Auflisten aller Inhalte in einem Verzeichnis und den zugehörigen Unterverzeichnissen

Sowohl die Funktion Directory.EnumerateDirectories als auch die Funktion Directory.EnumerateFiles verfügen über eine Überladung, die einen Parameter zur Angabe eines Suchmusters akzeptiert, mit dem Dateien und Verzeichnisse übereinstimmen müssen.

Außerdem verfügen beide über eine weitere Überladung, die einen Parameter akzeptiert, um anzugeben, ob ein bestimmter Ordner und alle zugehörigen Unterordner rekursiv durchlaufen werden sollen.

// Find all *.txt files in the stores folder and its subfolders
IEnumerable<string> allFilesInAllFolders = Directory.EnumerateFiles("stores", "*.txt", SearchOption.AllDirectories);

foreach (var file in allFilesInAllFolders)
{
    Console.WriteLine(file);
}

// Outputs:
// stores/totals.txt
// stores/201/inventory.txt

In der nächsten Übung verwenden Sie die Directory-Klasse, um das Hauptverzeichnis stores von Tailwind Traders dynamisch zu lesen, um nach allen sales.json-Dateien zu suchen.

Überprüfen Sie Ihr Wissen

1.

Welche der folgenden Aufgaben können Sie mit Directory.EnumerateFiles ausführen?