Warum die Fähigkeit, mit Dateien in C# zu arbeiten, eine Superkraft ist?
\n\nStellen Sie sich vor, Sie schreiben ein Programm, das Benutzereinstellungen speichern, Fehler protokollieren oder Tausende von Dokumenten verarbeiten soll. Ohne Kenntnisse der Dateisystemarbeit stoßen Sie an eine Wand. In C# ist die Arbeit mit Dateien nicht nur langweiliges Zeilenlesen. Es ist die Möglichkeit, leistungsstarke Dienstprogramme, Parser und sogar Mini-Datenbanken zu erstellen.
\n\nIn diesem Artikel behandeln wir alles: vom einfachen File.ReadAllText bis zur fortgeschrittenen Arbeit mit Streams und Ordnern. Sie erfahren, wie Sie Daten nicht verlieren, wie Sie das Lesen großer Dateien optimieren und wie Sie die „Fallstricke“ des Dateisystems umgehen. Los geht's!
Die Heldenklassen: File, FileInfo, Directory und Path
\n\nIn .NET gibt es zwei Ansätze für die Arbeit mit Dateien: statische Methoden der Klasse File und Instanzmethoden der Klasse FileInfo. Ersteres ist für schnelle Operationen wie „gelesen-geschrieben“, Letzteres, wenn Sie lange und zustandsbehaftet mit einer einzelnen Datei arbeiten müssen.
File vs FileInfo: Wann verwende ich was?
\n\nFile ist eine statische Klasse. Sie schreiben File.Exists("test.txt") – und fertig. Praktisch, aber bei jeder Operation wird der Pfad erneut geprüft.
FileInfo – Sie erstellen einmal ein Objekt und rufen dann Methoden auf. Das ist schneller, wenn Sie mehrere Aktionen mit einer Datei durchführen.
\n\n// Schneller Weg\nif (File.Exists(@"C:\\data\\log.txt"))\n{\n string content = File.ReadAllText(@"C:\\data\\log.txt");\n Console.WriteLine(content);\n}\n\n// Professioneller Weg\nFileInfo fileInfo = new FileInfo(@"C:\\data\\log.txt");\nif (fileInfo.Exists)\n{\n using (StreamReader reader = fileInfo.OpenText())\n {\n string content = reader.ReadToEnd();\n Console.WriteLine(content);\n }\n}\n\n\nDie Klasse Directory funktioniert nach dem gleichen Prinzip – statische Methoden für schnelle Operationen mit Ordnern. Path ist ein unverzichtbarer Helfer zum Zusammenfügen von Pfaden: Path.Combine("folder", "file.txt") setzt automatisch den richtigen Schrägstrich.
Dateien lesen: Vom Kleinen bis zum Gigantischen
\n\nDas Lesen von Dateien in C# ist eine Kunst der Balance zwischen Einfachheit und Leistung. Lassen Sie uns drei Ebenen betrachten.
\n\nEbene 1: Alles auf einmal (für kleine Dateien)
\n\nWenn die Datei bis zu 10 MB groß ist, verwenden Sie bedenkenlos ReadAllText oder ReadAllLines.
string text = File.ReadAllText("config.json");\nstring[] lines = File.ReadAllLines("users.csv");\n\n\nNachteil: Bei einer großen Datei riskieren Sie eine OutOfMemoryException.
Ebene 2: Zeilenweises Lesen (für mittlere Dateien)
\n\nWir verwenden StreamReader – lesen Zeile für Zeile, ohne alles in den Speicher zu laden.
using (StreamReader reader = new StreamReader("big_log.txt"))\n{\n string line;\n while ((line = reader.ReadLine()) != null)\n {\n Console.WriteLine(line); // Jede Zeile verarbeiten\n }\n}\n\n\nBeachten Sie das using – es stellt sicher, dass die Datei geschlossen wird, selbst wenn ein Fehler auftritt.
Ebene 3: Binärdaten lesen (für Profis)
\n\nDie Arbeit mit Bildern, Archiven oder anderen Nicht-Text-Dateien erfordert FileStream.
using (FileStream fs = new FileStream("photo.jpg", FileMode.Open, FileAccess.Read))\n{\n byte[] buffer = new byte[1024];\n int bytesRead;\n while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)\n {\n // Datenblock verarbeiten\n Console.WriteLine($"Gelesen {bytesRead} Bytes");\n }\n}\n\n\nDateien schreiben: Wie Sie Daten nicht verlieren
\n\nSchreiben in C# ist nicht nur File.WriteAllText. Es ist wichtig, die Modi zu verstehen: Neue Datei erstellen, an das Ende anhängen oder überschreiben.
Die wichtigsten FileMode-Modi
\n- \n
- CreateNew<