Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Memastikan BaseStream Terbuka Selepas Menutup StreamWriter?

Bagaimana untuk Memastikan BaseStream Terbuka Selepas Menutup StreamWriter?

Mary-Kate Olsen
Lepaskan: 2025-01-12 07:11:43
asal
1000 orang telah melayarinya

How to Keep a BaseStream Open After Closing a StreamWriter?

Bagaimana untuk memastikan BaseStream terbuka selepas StreamWriter ditutup?

Kelas

StreamWriter 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>
Salin selepas log masuk

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:

  1. Jangan lepaskan StreamWriter. Sebaliknya, muat semula dan benarkan BaseStream kekal terbuka.
  2. Buat pembalut strim. mencipta kelas yang membalut 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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan