Heim >Backend-Entwicklung >C++ >Wie halte ich einen BaseStream offen, nachdem ich einen StreamWriter geschlossen habe?

Wie halte ich einen BaseStream offen, nachdem ich einen StreamWriter geschlossen habe?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-12 07:11:431054Durchsuche

How to Keep a BaseStream Open After Closing a StreamWriter?

Wie kann BaseStream geöffnet bleiben, nachdem StreamWriter geschlossen wurde?

Die

StreamWriter-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:

  1. Nicht freigeben StreamWriter. Aktualisieren Sie es stattdessen und lassen Sie BaseStream geöffnet bleiben.
  2. Erstellen Sie einen Stream-Wrapper. erstellt eine Klasse, die 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn