Comment garder BaseStream ouvert après la fermeture de StreamWriter ?
La classeStreamWriter
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>
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 :
StreamWriter
. Au lieu de cela, rafraîchissez-le et laissez BaseStream
rester ouvert. 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>
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>
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!