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 版本,您有兩種選擇:
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中文網其他相關文章!