Code-Beispiel
Ein Beispiel zum Einsatz der Klasse System.IO.FileStream, StreamWriter aus der .NET-Klassenbibliothek.
Autor: Dr. Holger Schwichtenberg
Beschreibung
Die Verwendung von Streams (Datenströmen) ist ein zentrales Konzept in .NET. Ein Stream ist eine beliebige Byte-Folge in einem beliebigen Medium, z.B. eine Textdatei, eine Binärdatei, ein Datenstrom im Netzwerk oder auch eine Byte-Folge im Speicher. Es gibt für Streams in der FCL eine abstrakte Basisklasse System.IO.Stream, von der zahlreiche Klassen in verschiedenen Namespaces erben. Es gibt zahlreiche Attribute und Methoden in FCL-Klassen, die mit Streams arbeiten.
Auf einen Stream greift man mit Hilfe anderer Klassen zu: StreamReader und StreamWriter für Streams mit ASCII-Zeichen und BinaryReader und BinaryWriter für Streams mit beliebigen Byte-Folgen. StreamReader und StreamWriter sind Unterklassen der Klassen TextReader bzw. TextWriter. BinaryReader und BinaryWriter sind dagegen direkt von System.Object abgeleitet.
Während ein FileInfo-Objekt das Äußere einer Datei darstellt, ist ein FileStream-Objekt der Inhalt einer Datei.
Das grundsätzliche Vorgehen beim Schreiben in eine Datei ist:- Erzeugen eines FileStream-Objekts unter Angabe der Parameter FileMode und FileAccess
- Erzeugen eines StreamWriter-Objekts auf Basis des FileStream-Objekts
- Setzen des Zeigers auf Anfang oder Ende des Streams
- Danach können Inhalte mit Write() und WriteLine() geschrieben werden.
- Aufruf von Close() im StreamWriter-Objekt
- Aufruf von Close() im FileStream-Objekt
Ohne Aufruf von Close() im StreamWriter wird nichts in die Datei geschrieben. Close() darf für den FileStream erst nach dem Schließen des StreamWriter-Objekts aufgerufen werden.
Für FileAccess und FileMode gibt es Enumerationen in System.IO.
Symbolische Konstante Wenn Datei vorhanden Wenn Datei nicht vorhanden
Append Anhängen Wird erzeugt
Create Wird überschrieben Wird erzeugt
CreateNew Fehler Wird erzeugt
Open Öffnen Fehler
OpenOrCreate Öffnen Wird erzeugt
Truncate Öffnen + Löschen Fehler
Symbolische Konstante Lesen Schreiben
Read Ja Nein
ReadWrite Ja Ja
Write Nein Ja
Beispiel
Die folgende Routine hängt eine Protokollierungsinformation an eine Textdatei an.
Programmcodebeispiele Visual Basic .NET (VB.NET)
' ============================
' .NET-Code-Beispiel in Visual Basic .NET
' Schreiben einer Protokolldatei
' (C) Holger@Schwichtenberg.de
' ============================
Public Sub datei_schreiben()
Const DATEINAME As String = _
"d:\buch\dateisystem\protokoll.txt"
' --- Datei öffnen
Dim fs As FileStream = New FileStream( _
DATEINAME, FileMode.OpenOrCreate, _
FileAccess.Write)
' --- Stream öffnen
Dim w As StreamWriter = New StreamWriter(fs)
' --- Anfügen am Ende
w.BaseStream.Seek(0, SeekOrigin.End)
' --- Zeilen schreiben
w.WriteLine("Start des Programms: " & now)
' --- Einzelne Zeichen schreiben
Dim a As Integer
For a = 1 To 26
w.Write(chr(96 + a))
Next
w.WriteLine()
' --- Zeilen schreiben
w.WriteLine("Ende des Programms: " & now)
' --- Writer und Stream schließen
w.Close()
fs.Close()
End Sub
Programmcodebeispiele CSharp (C#)
using System;
using System.IO;
namespace FCLBuch._SystemIO {
public class Samples_Dateiinhalte {
// Schreiben einer Protokolldatei
public void Datei_Schreiben() {
string dateiName = @"..\_daten\dateisystem\protokoll.txt";
// Datei öffnen
FileStream fs = new FileStream(dateiName, FileMode.OpenOrCreate, FileAccess.Write);
// Stream öffnen
StreamWriter w = new StreamWriter(fs);
// Anfügen am Ende
w.BaseStream.Seek(0, SeekOrigin.End);
// Zeilen Schreiben
w.WriteLine("Start des Programms: " + DateTime.Now.ToString());
// Einzelne Zeichen schreiben
for ( int i=0; i<26; i++ )
w.Write((char)(97 + i));
w.WriteLine();
// Zeilen Schreiben
w.WriteLine("Ende des Programms: " + DateTime.Now.ToString());
// Writer und Stream schließen
w.Close();
fs.Close();
}
}
}
Querverweise
Liste aller Codebeispiele
Definition '.NET Framework Class Library'
Verfügbarkeit der Klasse 'System.IO.FileStream, StreamWriter'
Übersicht über den FCL-Namensraum 'System.IO'
.NET & Visual Studio Community Portal