Arbeiten mit dem Dateisystem in C#: von der Theorie zur Praxis
Das Arbeiten mit dem Dateisystem ist eine der grundlegenden Aufgaben, mit denen jeder Entwickler konfrontiert wird. Ob Protokollierung, Verarbeitung von Konfigurationsdateien, Datenimport oder Erstellung von Berichten – die Fähigkeit, Dateien in C# (.NET) kompetent zu lesen, zu schreiben und zu verwalten, ist in jedem Projekt notwendig. In diesem Artikel werden wir praktische Beispiele für die Arbeit mit dem Dateisystem in C# durchgehen, von einfachen Operationen bis hin zur Verarbeitung von Verzeichnissen.
Wir werden den Namensraum System.IO verwenden, der alle notwendigen Klassen für die Interaktion mit dem Dateisystem bereitstellt.
1. Grundlegende Klassen für die Arbeit mit Dateien und Ordnern
Bevor wir Code schreiben, ist es wichtig, die wichtigsten Klassen kennenzulernen:
- File – statische Klasse zum Erstellen, Kopieren, Löschen und Verschieben von Dateien.
- FileInfo – Instanzklasse, die Informationen über eine bestimmte Datei und Methoden zur Arbeit mit ihr bereitstellt.
- Directory – statische Klasse für die Arbeit mit Ordnern.
- DirectoryInfo – Instanzklasse zum Abrufen von Informationen über einen Ordner.
- Path – Hilfsklasse für die Arbeit mit Dateipfaden.
Betrachten wir ein einfaches Beispiel – die Überprüfung, ob eine Datei existiert, und deren Erstellung:
using System;using System.IO;
class Program{ static void Main() { string filePath = @"C:\\Test\\example.txt";
if (File.Exists(filePath)) { Console.WriteLine("Datei existiert."); } else { File.Create(filePath).Close(); Console.WriteLine("Datei erstellt."); } }}Beachten Sie: Nach File.Create() rufen wir Close() auf, um den Stream freizugeben. In modernen Projekten ist es besser, die using-Anweisung zu verwenden.
2. Lesen und Schreiben von Textdateien
Das häufigste Szenario ist das Lesen und Schreiben von Textinformationen. In C# gibt es dafür die praktischen Klassen StreamReader und StreamWriter.
2.1 Daten in eine Datei schreiben
Beispiel für das Schreiben von Zeilen in eine Datei mit StreamWriter:
string path = @"C:\\Test\\log.txt";string[] lines = { "Erste Zeile", "Zweite Zeile", "Dritte Zeile" };
using (StreamWriter writer = new StreamWriter(path, false)){ foreach (string line in lines) { writer.WriteLine(line); }}Console.WriteLine("Daten geschrieben.");Der zweite Parameter des StreamWriter-Konstruktors – false – bedeutet Überschreiben der Datei. Wenn Sie true angeben, werden die Daten am Ende angehängt.
2.2 Daten aus einer Datei lesen
Lesen des gesamten Inhalts oder zeilenweise:
string path = @"C:\\Test\\log.txt";
// Lesen des gesamten Textes in einer Zeilestring allText = File.ReadAllText(path);Console.WriteLine("Gesamter Text:" + allText);
// Zeilenweises Lesenstring[] allLines = File.ReadAllLines(path);Console.WriteLine("Zeilenweise:");foreach (string line in allLines){ Console.WriteLine(line);}Für große Dateien ist es besser, StreamReader mit zeilenweisem Lesen in einer Schleife zu verwenden, um nicht die gesamte Datei in den Speicher zu laden.
using (StreamReader reader = new StreamReader(path)){ string currentLine; while ((currentLine = reader.ReadLine()) != null) { Console.WriteLine(currentLine); }}3. Arbeiten mit Binärdateien (FileStream)
Wenn Sie mit Binärdaten (Bilder, Archive, serialisierte Objekte) arbeiten müssen, wird die Klasse FileStream verwendet. Sie ermöglicht das Lesen und Schreiben von Daten in Form von Bytes.
Beispiel für das Schreiben und Lesen eines Byte-Arrays: