Arbeiten mit Dateipfaden in .NET

Abgeschlossen

.NET bietet integrierte Mechanismen für die Arbeit mit Dateisystempfaden.

In der vorherigen Übung mussten nur wenige Ordner analysiert werden. Wenn viele Dateien und Ordner in Ihrem Dateisystem vorhandenen sind, kann die manuelle Pfaderstellung mühsam sein. Praktischerweise bietet .NET einige integrierte Konstanten und Hilfsprogramme, die den Umgang mit Dateipfaden vereinfachen.

Hier lernen Sie einige der Konstanten und Hilfsfunktionen im Namespace System.IO sowie den Typ System.Environment kennen, damit Sie das Programm effizienter und resilienter gestalten können.

Bestimmen des aktuellen Verzeichnisses

Manchmal kennen Sie das Verzeichnis oder den Pfad nicht, in dem Ihr Programm ausgeführt werden soll. Angenommen, Sie möchten, dass Ihr Programm das aktuelle Verzeichnis verwendet, aber Sie kennen den Pfad nicht.

.NET macht den vollständigen Pfad zum aktuellen Verzeichnis über die Methode Directory.GetCurrentDirectory verfügbar.

Console.WriteLine(Directory.GetCurrentDirectory());

Wenn Sie den voranstehenden Code für den Ordner 201 in der folgenden Struktur ausführen, gibt Directory.GetCurrentDirectory() stores\201 zurück.

📂 stores
    📂 201

Arbeiten mit speziellen Verzeichnissen

.NET kann überall ausgeführt werden: unter Windows, macOS, Linux und sogar unter mobilen Betriebssystemen wie iOS und Android. Jedes Betriebssystemen hat möglicherweise ein spezielles Konzept für Systemordner, wie z. B. ein Stammverzeichnis für benutzerspezifische Dateien, ein Desktopverzeichnis oder ein Verzeichnis zum Speichern temporärer Dateien.

Diese Verzeichnisarten unterscheiden sich für jedes Betriebssystem. Es wäre mühsam, sich die Verzeichnisstruktur jedes Betriebssystems zu merken und Änderungen basierend auf dem aktuellen Betriebssystem vornehmen zu müssen.

Die System.Environment.SpecialFolder-Enumeration gibt Konstanten zum Abrufen von Pfaden zu speziellen Systemordnern an.

Der folgende Code gibt den Pfad zum entsprechenden Windows-Ordner Dokumente oder, wenn der Code unter Linux ausgeführt wird, zum Verzeichnis HOME des Benutzers bzw. der Benutzerin zurück:

string docPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

Arbeit mit Pfaden

Pfade sind so wichtig, dass .NET eine Klasse namens Path enthält, das für die Arbeit mit diesen verwendet wird.

Die Path-Klasse befindet sich im Namespace System.IO, der in .NET enthalten ist und nicht installiert werden muss.

Spezielle Pfadzeichen

Unterschiedliche Betriebssysteme verwenden unterschiedliche Zeichen, um Verzeichnisebenen voneinander zu trennen.

Windows verwendet beispielsweise einen umgekehrten Schrägstrich (stores\201), macOS dagegen einen Schrägstrich (stores/201).

Damit das richtige Zeichen verwendet wird, enthält die Klasse Path das Feld DirectorySeparatorChar.

.NET übersetzt dieses Feld automatisch in das jeweilige betriebssystemspezifische Trennzeichen, wenn Sie einen Pfad manuell erstellen müssen.

Console.WriteLine($"stores{Path.DirectorySeparatorChar}201");

// returns:
// stores\201 on Windows
//
// stores/201 on macOS

Verknüpfen von Pfaden

Die Path-Klasse arbeitet mit dem Konzept von Datei- und Ordnerpfaden, bei denen es sich lediglich um Zeichenfolgen handelt. Sie können die Klasse Path verwenden, um automatisch die richtigen Pfade für bestimmte Betriebssysteme zu erstellen.

Wenn Sie beispielsweise den Pfad zum Ordner stores/201 abrufen möchten, können Sie dazu die Path.Combine-Funktion verwenden.

Console.WriteLine(Path.Combine("stores","201")); // outputs: stores/201

Denken Sie daran: Der Grund für die Verwendung der Path.Combine- oder Path.DirectorySeparatorChar-Klasse anstelle einer hartcodierten Zeichenfolge ist, dass Ihr Programm möglicherweise unter vielen verschiedenen Betriebssystemen ausgeführt wird. Die Path-Klasse formatiert Pfade korrekt für alle Betriebssysteme, auf denen sie läuft.

Tipp

Für die Path-Klasse ist nicht relevant, ob die Eingaben tatsächlich vorhanden sind. Pfade sind konzeptionell, nicht physisch, und die Klasse erstellt und analysiert Zeichenfolgen für Sie.

Bestimmen von Erweiterungen

Die Path-Klasse kann Ihnen auch die Erweiterung eines Dateinamens mitteilen. Wenn Sie herausfinden möchten, ob es sich bei einer Datei um eine JSON-Datei handelt, können Sie die Funktion Path.GetExtension verwenden.

Console.WriteLine(Path.GetExtension("sales.json")); // outputs: .json

Einholen erforderlicher Informationen zu einer Datei oder einem Pfad

Die Path-Klasse enthält viele verschiedene Methoden, die verschiedene Funktionen erfüllen. Die meisten Informationen zu einem Verzeichnis oder einer Datei erhalten Sie, indem Sie die Klasse DirectoryInfo bzw. FileInfo verwenden.

string fileName = $"stores{Path.DirectorySeparatorChar}201{Path.DirectorySeparatorChar}sales{Path.DirectorySeparatorChar}sales.json";

FileInfo info = new FileInfo(fileName);

Console.WriteLine($"Full Name: {info.FullName}{Environment.NewLine}Directory: {info.Directory}{Environment.NewLine}Extension: {info.Extension}{Environment.NewLine}Create Date: {info.CreationTime}"); // And many more

Für die Klassen Path, DirectoryInfo und FileInfo gibt es viele weitere nützliche Eigenschaften und Hilfsmethoden. Die vorgestellten sind jedoch die Hauptkonzepte, die Sie vermutlich am häufigsten verwenden werden. In der nächsten Übung kombinieren Sie Pfade und ermitteln JSON-Dateien.