Arbeiten mit dem Dateisystem in C#: Von den Grundlagen bis zu fortgeschrittenen Techniken
Die Arbeit mit dem Dateisystem ist eine der Kernaufgaben bei der Entwicklung von Anwendungen in C#. Ob es um das Speichern von Benutzerdaten, das Lesen von Konfigurationsdateien oder die Verarbeitung von Logs geht – die Fähigkeit, effektiv mit Dateien und Verzeichnissen zu interagieren, ist für jeden .NET-Entwickler notwendig. In diesem Artikel werden wir die wichtigsten Klassen des Namespace System.IO besprechen, lernen, Dateien zu erstellen, zu lesen und zu ändern, sowie bewährte Methoden zur Fehlerbehandlung betrachten.
1. Grundlegende Klassen für die Arbeit mit dem Dateisystem
In .NET sind für die Arbeit mit Dateien und Verzeichnissen mehrere Schlüsselklassen vorgesehen. Betrachten wir sie genauer.
Die Klasse File und FileInfo
File ist eine statische Klasse, die Methoden zum Erstellen, Kopieren, Löschen und Verschieben von Dateien bereitstellt. FileInfo ist eine Instanzklasse, die die Arbeit mit einer bestimmten Datei ermöglicht.
using System.IO;
// Verwendung der statischen Klasse Filestring path = @"C:\\Temp\\test.txt";if (File.Exists(path)){ string content = File.ReadAllText(path); Console.WriteLine(content);}
// Verwendung von FileInfoFileInfo fileInfo = new FileInfo(path);if (fileInfo.Exists){ Console.WriteLine($"Dateigröße: {fileInfo.Length} Bytes"); Console.WriteLine($"Erstellungsdatum: {fileInfo.CreationTime}");}Die Klasse Directory und DirectoryInfo
Analog dazu ist Directory eine statische Klasse für Operationen mit Verzeichnissen, und DirectoryInfo für die Arbeit mit einem bestimmten Ordner.
string dirPath = @"C:\\Temp\\MyFolder";
// Verzeichnis erstellenDirectory.CreateDirectory(dirPath);
// Informationen über das Verzeichnis abrufenDirectoryInfo dirInfo = new DirectoryInfo(dirPath);if (dirInfo.Exists){ Console.WriteLine($"Unterverzeichnisse: {dirInfo.GetDirectories().Length}"); Console.WriteLine($"Dateien: {dirInfo.GetFiles().Length}");}Die Klasse Path
Path ist eine Hilfsklasse für die Arbeit mit Pfaden. Sie hilft beim Kombinieren von Pfaden, Extrahieren von Erweiterungen und Dateinamen.
string fullPath = @"C:\\Temp\\myfile.txt";string fileName = Path.GetFileName(fullPath); // myfile.txtstring extension = Path.GetExtension(fullPath); // .txtstring directory = Path.GetDirectoryName(fullPath); // C:\\Tempstring combined = Path.Combine(@"C:\\Temp", "newfile.txt"); // C:\\Tempewfile.txt2. Lesen und Schreiben von Dateien
In C# gibt es mehrere Möglichkeiten, Dateien zu lesen und zu schreiben. Die Wahl hängt von der Datengröße und der erforderlichen Leistung ab.
Lesen von Textdateien
Für kleine Dateien ist es praktisch, einzeilige Methoden zu verwenden:
// Lesen der gesamten Datei in einer Zeilestring text = File.ReadAllText("data.txt");
// Lesen aller Zeilen in ein Arraystring[] lines = File.ReadAllLines("data.txt");
// Lesen mit StreamReader (für große Dateien)using (StreamReader reader = new StreamReader("largefile.txt")){ string line; while ((line = reader.ReadLine()) != null) { Console.WriteLine(line); }}Schreiben in Dateien
// Schreiben eines StringsFile.WriteAllText("output.txt", "Hello, World!");
// Schreiben eines String-Arraysstring[] lines = { "Erste Zeile", "Zweite Zeile" };File.WriteAllLines("output.txt", lines);
// Anhängen an das Ende einer DateiFile.AppendAllText("log.txt", $"{DateTime.Now}: Neuer Eintrag");
// Schreiben mit StreamWriterusing (StreamWriter writer = new StreamWriter("data.txt", append: true)){ writer.WriteLine("Neue Zeile");}Arbeiten mit Binärdateien
Für Binärdaten verwenden Sie FileStream und BinaryReader/BinaryWriter:
// Schreiben von Binärdatenusing (BinaryWriter writer = new BinaryWriter(File.Open("data.bin"