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

Bagaimana untuk Memastikan BaseStream Terbuka Selepas Menutup StreamWriter?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-12 07:11:431051semak imbas

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>

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>

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!

Kenyataan:
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