12 Arbeiten mit Dateien und Streams
12.1 Einführung
Das .NET Framework bietet eine Klassenbibliothek, die in Namespaces organisiert ist. Jeder Namespace beschreibt eine zusammenhängende oder zumindest doch verwandte Thematik. Mit Daten zu operieren, egal ob man Daten schreibt oder liest, steht im Zusammenhang mit Dateien. Daher ist es auch nicht erstaunlich, dass sich die wichtigsten Klassen, die mit Dateien und Datenoperationen zu tun haben, in einem Namespace wiederfinden: System.IO.
Wollte man ein kurzes, allgemein gehaltenes Inhaltsverzeichnis von System.IO angeben, müsste dieses drei Hauptabschnitte umfassen:
- Klassen, die ihre Dienste auf der Basis von Dateien und Verzeichnissen anbieten
- Klassen, die den Datentransport beschreiben
- Ausnahmeklassen
Der Schwerpunkt liegt wohl eher auf den Klassen, die durch Punkt 2 beschrieben werden, und geht weit über die Operationen hinaus, die im direkten Zusammenhang mit Dateien stehen. Daraus resultiert letztendlich auch die Namensangabe des Namespaces IO für Input/Output-Operationen oder, wie es auch sehr häufig in der deutschen Übersetzung lautet, E/A-Operationen (für die Ein- und Ausgabe).
In diesem Kapitel geht es primär darum, Dateninformationen aus einer beliebigen Datenquelle zu holen und an ein beliebiges Ziel zu schicken. Meist sind sowohl die Quelle als auch das Ziel eines Datenstroms Dateien, aber es kann auch noch ganz andere Anfangs- und Endpunkte geben, beispielsweise:
- eine Benutzeroberfläche
- Netzwerkverbindungen
- Speicherblöcke
- Drucker
- andere Peripheriegeräte
In gehobenen Programmiersprachen wird ein Datenfluss als Stream bezeichnet. Ein Stream hat einen Anfangs- und einen Endpunkt: eine Quelle, an der der Datenstrom entspringt, und das Ziel, das den Datenstrom empfängt. Die Methoden Console.WriteLine und Console.ReadLine, mit denen wir quasi schon von der ersten Seite dieses Buches an arbeiten, erzeugen auch solche Datenströme.
Abbildung 12.1 Datenströme einer lokalen Arbeitsstation
Streams haben individuelle Charakteristiken. Das ist auch der Grund, weshalb es nicht nur eine Stream-Klasse gibt, sondern mehrere. Jeder Stream dient ganz speziellen Anforderungen und kann diese mehr oder weniger gut erfüllen. Beispielsweise gibt es Streams, deren Daten direkt als Text interpretiert werden, während andere nur Bytesequenzen transportieren, die der Empfänger erst in das richtige Format bringen muss, um den Inhalt zu interpretieren.
Ein Stream ist nicht dauerhaft: Er wird geöffnet und liest oder schreibt Daten. Nach dem Schließen sind die Daten verloren, wenn sie nicht von einem Empfänger, beispielsweise einer Datei, dauerhaft gespeichert werden.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.