Maison > développement back-end > C++ > Comment garder un BaseStream ouvert après la fermeture d'un StreamWriter ?

Comment garder un BaseStream ouvert après la fermeture d'un StreamWriter ?

Mary-Kate Olsen
Libérer: 2025-01-12 07:11:43
original
999 Les gens l'ont consulté

How to Keep a BaseStream Open After Closing a StreamWriter?

Comment garder BaseStream ouvert après la fermeture de StreamWriter ?

La classe

StreamWriter libère son BaseStream sous-jacent lorsqu'elle est fermée. Cela peut poser un problème si vous souhaitez garder BaseStream ouvert pour une utilisation ultérieure.

Solutions pour .NET Framework 4.5 et supérieur

Si vous utilisez .NET Framework 4.5 ou supérieur, vous pouvez utiliser une version surchargée de StreamWriter qui vous permet de spécifier si le BaseStream doit rester ouvert lors de la fermeture du rédacteur :

<code class="language-csharp">public StreamWriter(Stream stream, Encoding encoding, bool leaveOpen);</code>
Copier après la connexion

Vous pouvez fermer leaveOpen sans fermer true en réglant le paramètre BaseStream sur StreamWriter.

Solutions pour les versions antérieures de .NET Framework

Si vous utilisez une version de .NET Framework antérieure à 4.5, vous avez deux options :

  1. Ne relâchez pas StreamWriter. Au lieu de cela, rafraîchissez-le et laissez BaseStream rester ouvert.
  2. Créez un wrapper de flux. crée une classe qui enveloppe BaseStream et ignore les appels à Close() et Dispose(). Cela vous permet de fermer StreamWriter sans affecter BaseStream.

Exemple (pré-.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>
Copier après la connexion

En utilisant ce wrapper de flux, vous pouvez créer un StreamWriter qui utilise le flux encapsulé :

<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>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal