ホームページ > バックエンド開発 > C++ > BaseStream を閉じずに StreamWriter を破棄するにはどうすればよいですか?

BaseStream を閉じずに StreamWriter を破棄するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-12 07:01:47
オリジナル
349 人が閲覧しました

How Can I Dispose of a StreamWriter Without Closing its BaseStream?

StreamWriter の独立した管理: 基礎となるストリームを閉じずに解放

StreamWriter オブジェクトが解放されると、それに関連付けられた基になるストリームも解放されます。この動作は、基になるストリームを開いたままにする必要がある場合に問題を引き起こす可能性があります。幸いなことに、この問題を解決する方法はいくつかあります。

代替:

  1. 基になるストリームのリリースをオーバーライドする: .NET Framework 4.5 以降では、StreamWriter は、基になるストリームの既定のリリース動作をオーバーライドできるオーバーロードを提供します。このオーバーロードを使用すると、基になるストリームを開いたままにすることができます。
  2. リリースの延期: 4.5 より前のバージョンの .NET Framework を使用している場合は、StreamWriter のリリースを延期することを検討してください。 Dispose を直接呼び出す必要はありません。バッファをフラッシュして、それ以上の書き込みを避けるだけです。
  3. ストリーム ラッパー: Close/Dispose 呼び出しをインターセプトしますが、他のすべての操作を基礎となるストリームに渡すラッパー ストリームを作成します。これにより、基になるストリームに影響を与えることなく、StreamWriter を独立して管理できるようになります。

コード例:

次のコードは、.NET Framework 4.5 以降での StreamWriter オーバーロードの使用を示しています。

<code class="language-csharp">using (var writer = new StreamWriter(baseStream, Encoding.UTF8, leaveOpen: true))
{
    // 对StreamWriter进行写入操作
}

// 基础流保持打开状态</code>
ログイン後にコピー

古いバージョンの .NET Framework の場合:

古いバージョンの .NET Framework では、以下を使用してストリーム ラッパーを結合できます。

<code class="language-csharp">public class StreamWrapper : Stream
{
    private Stream baseStream;

    public StreamWrapper(Stream baseStream)
    {
        this.baseStream = baseStream;
    }

    // 重写Close和Dispose方法以忽略基础流调用
    // ...  (此处需要补充Close和Dispose方法的具体实现,使其不关闭baseStream)
}

// 使用方法
using (var writer = new StreamWriter(new StreamWrapper(baseStream)))
{
    // 对StreamWriter进行写入操作
}

// 基础流保持打开状态</code>
ログイン後にコピー
これらの手法を採用すると、基になるストリームの状態に影響を与えることなく StreamWriter オブジェクトを管理できます。 .NET Framework のストリーム ラッパー サンプルの古いバージョンでは、

メソッドと Close メソッドが Dispose を閉じないように自分で実装する必要があることに注意してください。 baseStream

以上がBaseStream を閉じずに StreamWriter を破棄するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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