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 つのオプションがあります:
StreamWriter
を解放しないでください。 代わりに、それを更新し、BaseStream
を開いたままにしておきます。 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 サイトの他の関連記事を参照してください。