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 schreibenMemoryStream- Arbeitsspeicher (Byte-Array) lesen und schreibenNetworkStream- 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 DateiCreateNew- Erstellt eine neue Datei und gibt eine Exception wenn die Datei bereits existiertCreate- Erstellt eine neue Datei oder überschreibt eine existierende DateiOpenOrCreate- Öffnet eine existierende Datei oder erstellt eine neue DateiAppend- Öffnet eine existierende Datei und fügt am Ende der Datei hinzu
FileAccess
Gibt an was mit einer Datei gemacht werden kann
Read- Nur lesenWrite- Nur schreibenReadWrite- 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 lesenWrite- Andere Prozesse können die Datei schreibenReadWrite- Andere Prozesse können die Datei lesen und schreibenDelete- 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 StreamSeek()- Setzt den Cursor an eine bestimmte Position im StreamPosition- Gibt die aktuelle Byte-Position im Stream anLength- Gibt die Länge des Streams in Bytes anCanRead/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.