Skip to Content

Streams und IO

WriteLines und ReadLines für Files

File.ReadAllLines/File.WriteAllLines liest/schreibt die gesamte Datei auf einmal in eine String Array. Bei einem Stream gibt es StreamReader und StreamWriter für Text. Diese lesen Byte->Zeichen und schreiben Zeichen->Byte mit Encoding.

Was ist ein Stream?

Ein Stream ist ein Datenkanal für eine Folge von Bytes aus dem sequentiell gelesen werden kann. Dadurch können Daten bearbeitet werden, ohne den Ursprung der Datei zu kennen oder wohin sie geht. Man kann von Streams lesen, schreiben und suchen.

Streams müssen immer mit using oder Close/Dispose geschlossen werden, um Speicherlecks oder Dateisperren zu vermeiden.

using (var stream = new FileStream("example.txt", FileMode.Open)) { // ... } using (FileStream fileStream = File.OpenRead("example.txt")) { // ... }

Welche Arten von Streams gibt es?

Helper Streams

  • StreamReader - Liest Text aus einem Stream (Bytes->Zeichen) mit Encoding
  • StreamWriter - Schreibt Text in einen Stream (Zeichen->Bytes) mit Encoding
  • BinaryReader - Liest Binärdaten aus einem Stream
  • BinaryWriter - Schreibt Binärdaten in einen Stream
  • XmlReader - Liest XML-Daten aus einem Stream
  • XmlWriter - Schreibt XML-Daten in einen Stream

Function Streams

  • DeflateStream - Komprimiert und dekomprimiert Daten mit Deflate Algorithmus
  • GZipStream - Komprimiert und dekomprimiert Daten mit GZip Algorithmus
  • CryptoStream - Verschlüsselt und entschlüsselt Daten beim Lesen/Schreiben
  • BufferedStream - Fügt ein Puffer hinzu um viele kleine Lese- und Schreiboperationen zu einem großen zu vereinen.

Storage Streams

  • FileStream - Dateien lesen und schreiben
  • MemoryStream - Arbeitsspeicher (Byte-Array) lesen und schreiben
  • NetworkStream - Netzwerk (TCP/IP) lesen und schreiben

Rechten

FileStream file = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read);

FileMode

Gibt an was mit einer Datei passiert

  • Open - Öffnet eine existierende Datei
  • CreateNew - Erstellt eine neue Datei und gibt eine Exception wenn die Datei bereits existiert
  • Create - Erstellt eine neue Datei oder überschreibt eine existierende Datei
  • OpenOrCreate - Öffnet eine existierende Datei oder erstellt eine neue Datei
  • Append - Öffnet eine existierende Datei und fügt am Ende der Datei hinzu

FileAccess

Gibt an was mit einer Datei gemacht werden kann

  • Read - Nur lesen
  • Write - Nur schreiben
  • ReadWrite - Lesen und schreiben

FileShare

Legt fest, welche anderen Prozesse auf die Datei zugreifen können

  • None - Kein anderer Prozess darf auf die Datei zugreifen (Standard)
  • Read - Andere Prozesse können die Datei lesen
  • Write - Andere Prozesse können die Datei schreiben
  • ReadWrite - Andere Prozesse können die Datei lesen und schreiben
  • Delete - Löscht die Datei

Beispiel:

using System.IO; FileStream fileStream = new FileStream("example.txt", FileMode.Open, FileAccess.Read, FileShare.Read); FileStream fileStream2 = new FileStream("example.txt", FileMode.OpenOrCreate, FileAccess.Write, FileShare.None); FileStream fileStream3 = new FileStream("example.txt", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite); fileStream.Read(buffer, 0, buffer.Length); fileStream.Close();

Wichtige Methoden & Eigenschaften

  • Flush() - Leert den Puffer und schreibt die Daten in den Stream
  • Seek() - Setzt den Cursor an eine bestimmte Position im Stream
  • Position - Gibt die aktuelle Byte-Position im Stream an
  • Length - Gibt die Länge des Streams in Bytes an
  • CanRead / CanWrite - Gibt an, ob der Stream lesen oder schreiben kann

Pfadangaben

Bei Dateioperationen wird oft nach dem Pfad gefragt. Man sollte niemals / oder \ verwenden, sondern Path.Combine(folder, file) verwenden.

Last updated on