C# Datei-E/A: Lesen, Schreiben & Stream-Verwaltung
Datei & Stream
Eine Datei ist persistente Daten auf Datenträger. Beim Öffnen wird ein Stream (Byte-Fluss) erstellt:
- Input Stream – Lesen (
FileStream,StreamReader) - Output Stream – Schreiben (
FileStream,StreamWriter)
Wichtige System.IO Klassen
| Klasse | Zweck |
|---|---|
File | Statische Helfer: ReadAllText, WriteAllText, Exists, Copy, Delete, … |
FileInfo | Instanzbasierte Operationen auf einer Datei. |
Directory / DirectoryInfo | Verzeichnis-Operationen. |
Path | Pfadmanipulation (Combine, GetExtension, GetTempFileName). |
FileStream | Byte-basierter Low-Level-Zugriff (Position, Seek). |
StreamReader / StreamWriter | Text-Lesen/Schreiben (Encoding, Zeilenweise). |
BinaryReader / BinaryWriter | Primitive Typen binär lesen/schreiben. |
MemoryStream | Stream im RAM (schnell, temporär). |
BufferedStream | Pufferung über anderem Stream. |
FileStream – Low-Level
using (FileStream fs = new FileStream("test.dat", FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
for (int i = 1; i <= 20; i++) fs.WriteByte((byte)i);
fs.Position = 0;
for (int i = 0; i <= 20; i++) Console.Write(fs.ReadByte() + " ");
}
// Ausgabe: 1 2 ... 20 -1
FileMode Enum
CreateNew– Neu, Fehler falls existiert.Create– Neu, überschreibt existierende.Open– Vorhandene öffnen, Fehler falls nicht existiert.OpenOrCreate– Öffnen oder neu erstellen.Append– Öffnen & Position ans Ende (oder neu).Truncate– Öffnen & Länge auf 0 setzen.
Text-Dateien: StreamReader / StreamWriter
// Schreiben
using (StreamWriter sw = new StreamWriter("log.txt", append: true, Encoding.UTF8))
{
sw.WriteLine($"Log: {DateTime.Now}");
sw.WriteLine("Zeile 2");
}
// Lesen (ganze Datei)
string all = File.ReadAllText("log.txt");
// Lesen zeilenweise
using (StreamReader sr = new StreamReader("log.txt"))
{
string line;
while ((line = sr.ReadLine()) != null)
Console.WriteLine(line);
}
Binär-Dateien: BinaryWriter / BinaryReader
using (BinaryWriter bw = new BinaryWriter(File.Open("data.bin", FileMode.Create)))
{
bw.Write(123); // int
bw.Write(3.14); // double
bw.Write("Hello"); // string (länge + bytes)
}
using (BinaryReader br = new BinaryReader(File.Open("data.bin", FileMode.Open)))
{
int i = br.ReadInt32();
double d = br.ReadDouble();
string s = br.ReadString();
}
Modernes API (.NET Core / .NET 5+)
File.ReadAllLinesAsync,File.WriteAllTextAsync– Asynchron.FileStreammitFileOptions.Asynchronous/RandomAccess(High-Performance).System.IO.Pipelinesfür hohe Durchsatz-Szenarien.
Best Practices
- Immer
using(oderawait using) für deterministisches Schließen. - Encoding explizit angeben (
Encoding.UTF8). Path.Combinefür plattformunabhängige Pfade.- Große Dateien streamen, nicht ganz in Memory laden.
- Ausnahmen (
IOException,UnauthorizedAccessException) behandeln.
C Sprache
- Titan: Schlüsseleigenschaften, Anwendungen und industrielle Nutzung
- Kastagnetten: Geschichte, Handwerkskunst und Performance
- Zinn: Von der Bronzezeit zur modernen Industrie – Nutzung, Produktion und Zukunft
- C Eingabe und Ausgabe (I/O) meistern: scanf() und printf() erklärt
- C-Dateiverwaltung: I/O mit fopen, fprintf, fread & fseek meistern
- Python File I/O: Dateioperationen, Lesen, Schreiben und Verwaltung meistern
- Datei-I/O in C meistern: Erstellen, Öffnen & Verwalten von Dateien
- C-Header-Dateien verstehen: Typen, Verwendung und Best Practices
- Python Datei-E/A: Eingabe- und Ausgabeoperationen meistern
- Feilen meistern: Präzisionsbearbeitung für Metall- und Holzprojekte