ホームページ > バックエンド開発 > C++ > StreamWriter を閉じた後も BaseStream を開いたままにする方法は?

StreamWriter を閉じた後も BaseStream を開いたままにする方法は?

Mary-Kate Olsen
リリース: 2025-01-12 07:11:43
オリジナル
1049 人が閲覧しました

How to Keep a BaseStream Open After Closing a StreamWriter?

StreamWriter を閉じた後も BaseStream を開いたままにする方法は?

StreamWriter クラスは、閉じられるとその基礎となる BaseStream を解放します。今後使用するために BaseStream を開いたままにしておく場合、これは問題になる可能性があります。

.NET Framework 4.5 以降のソリューション

.NET Framework 4.5 以降を使用している場合は、StreamWriter のオーバーロードされたバージョンを使用して、ライターを閉じるときに BaseStream を開いたままにするかどうかを指定できます。

<code class="language-csharp">public StreamWriter(Stream stream, Encoding encoding, bool leaveOpen);</code>
ログイン後にコピー

leaveOpen パラメータを true に設定すると、BaseStream を閉じずに StreamWriter を閉じることができます。

以前のバージョンの .NET Framework のソリューション

4.5 より前の .NET Framework バージョンを使用している場合は、2 つのオプションがあります:

  1. StreamWriterを解放しないでください。 代わりに、それを更新し、BaseStream を開いたままにしておきます。
  2. ストリーム ラッパーを作成します。 は、BaseStream をラップするクラスを作成し、Close()Dispose() の呼び出しを無視します。これにより、StreamWriter に影響を与えることなく BaseStream を閉じることができます。

例 (.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>
ログイン後にコピー

このストリーム ラッパーを使用すると、ラップされたストリームを使用する StreamWriter を作成できます:

<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>
ログイン後にコピー

以上がStreamWriter を閉じた後も BaseStream を開いたままにする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート