Heim >Backend-Entwicklung >C++ >Wie halte ich einen BaseStream offen, nachdem ich einen StreamWriter geschlossen habe?
Wie kann BaseStream geöffnet bleiben, nachdem StreamWriter geschlossen wurde?
DieStreamWriter
-Klasse gibt ihr zugrunde liegendes BaseStream
frei, wenn sie geschlossen wird. Dies kann ein Problem sein, wenn Sie BaseStream
für die weitere Verwendung offen halten möchten.
Lösungen für .NET Framework 4.5 und höher
Wenn Sie .NET Framework 4.5 oder höher verwenden, können Sie eine überladene Version von StreamWriter
verwenden, mit der Sie angeben können, ob das BaseStream
beim Schließen des Writers geöffnet bleiben soll:
<code class="language-csharp">public StreamWriter(Stream stream, Encoding encoding, bool leaveOpen);</code>
Sie können leaveOpen
schließen, ohne true
zu schließen, indem Sie den Parameter BaseStream
auf StreamWriter
setzen.
Lösungen für frühere Versionen von .NET Framework
Wenn Sie eine .NET Framework-Version vor 4.5 verwenden, haben Sie zwei Möglichkeiten:
StreamWriter
. Aktualisieren Sie es stattdessen und lassen Sie BaseStream
geöffnet bleiben. BaseStream
umschließt und Aufrufe von Close()
und Dispose()
ignoriert. Dadurch können Sie StreamWriter
schließen, ohne dass sich dies auf BaseStream
auswirkt. Beispiel (Pre-.NET Framework 4.5)
<code class="language-csharp">public class StreamWrapper : Stream { private Stream _baseStream; public StreamWrapper(Stream baseStream) { _baseStream = baseStream; } public override void Close() { // 忽略对 Close 的调用 } public override void Dispose() { // 忽略对 Dispose 的调用 } // 将其他流方法代理到基础流 ... }</code>
Mit diesem Stream-Wrapper können Sie einen StreamWriter
erstellen, der den umschlossenen Stream verwendet:
<code class="language-csharp">var baseStream = new MemoryStream(); var wrappedStream = new StreamWrapper(baseStream); using (var writer = new StreamWriter(wrappedStream, Encoding.UTF8)) { writer.Write("..."); writer.Flush(); } // 基础流保持打开状态 baseStream.Seek(0, SeekOrigin.Begin);</code>
Das obige ist der detaillierte Inhalt vonWie halte ich einen BaseStream offen, nachdem ich einen StreamWriter geschlossen habe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!