Bagaimana untuk memastikan BaseStream terbuka selepas StreamWriter ditutup?
KelasStreamWriter
mengeluarkan asas BaseStream
apabila ia ditutup. Ini boleh menjadi masalah jika anda ingin mengekalkan BaseStream
terbuka untuk kegunaan selanjutnya.
Penyelesaian untuk .NET Framework 4.5 dan ke atas
Jika anda menggunakan .NET Framework 4.5 atau lebih tinggi, anda boleh menggunakan versi terbeban StreamWriter
yang membolehkan anda menentukan sama ada BaseStream
harus kekal terbuka semasa menutup penulis:
<code class="language-csharp">public StreamWriter(Stream stream, Encoding encoding, bool leaveOpen);</code>
Anda boleh menutup leaveOpen
tanpa menutup true
dengan menetapkan parameter BaseStream
kepada StreamWriter
.
Penyelesaian untuk versi terdahulu .NET Framework
Jika anda menggunakan versi .NET Framework lebih awal daripada 4.5, anda mempunyai dua pilihan:
StreamWriter
. Sebaliknya, muat semula dan benarkan BaseStream
kekal terbuka. BaseStream
dan mengabaikan panggilan ke Close()
dan Dispose()
. Ini membolehkan anda menutup StreamWriter
tanpa menjejaskan BaseStream
. Contoh (Rangka Kerja Pra.NET 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>
Menggunakan pembalut strim ini, anda boleh membuat StreamWriter
yang menggunakan strim yang dibalut:
<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>
Atas ialah kandungan terperinci Bagaimana untuk Memastikan BaseStream Terbuka Selepas Menutup StreamWriter?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!