Neuigkeiten in der .NET-Klassenbibliothek,Teil 4: LeaveOpen-Option für BinaryReader, BinaryWriter, StreamReader und StreamWriter

Der vierte Beitrag der Artikelserie zu den nicht so bekannten Neuerungen der .NET-Klassenbibliothek behandelt den neuen Parameter "leaveOpen", der verhindert, dass Dispose() einen Stream schließt.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 1 Min.
Von
  • Dr. Holger Schwichtenberg

Die Version 4.5 der .NET-Framework-Klassenbibliothek enthält 947 neue Klassen. Eine Artikelserie stellt zehn Neuerungen vor, die nicht die großen Bibliotheken betreffen und daher nicht so im Licht der Öffentlichkeit stehen. Nachdem zuletzt asynchrone Methoden in IO-Klassen vorgestellt wurden, geht es heute in Teil 4 um die LeaveOpen-Option für BinaryReader, BinaryWriter, StreamReader und StreamWriter.

Die IO-Klassen BinaryReader, BinaryWriter, StreamReader und StreamWriter können einen System.IO.Stream als Konstruktorparameter entgegennehmen und auf diesem arbeiten. Bisher allerdings führte ein Dispose()-Aufruf in den vorgenannten Klassen zum Schließen des Streams. Daher war es nicht möglich, auf dem gleichen Stream mehrere Aktionen auszuführen, wenn man den BinaryReader, BinaryWriter, StreamReader und StreamWriter wieder schließen wollte oder musste. In der .NET-4.5-Klassenbibliothek haben die Konstruktoren dieser Klassen nun einen weiteren Parameter "leaveOpen", der verhindert, dass Dispose() den Stream schließt. Nachstehend ein Beispiel:

Stream Datei = File.Open(@"w:\dokument.txt", 
FileMode.OpenOrCreate, FileAccess.ReadWrite);

bool leaveOpen = true;
using (var sr = new StreamReader(Datei, Encoding.ASCII,
false, 100, leaveOpen))
{
Console.WriteLine(sr.ReadToEnd());
}

using (var sr = new StreamWriter(Datei))
{
sr.WriteLine("Daten");
}

Datei.Close();
} ()