2009-07-05 7 views

risposta

10

Basta non chiamare Dispose, usare Flush invece, è sicuro.

+0

Sì, l'ho controllato su Reflector ed è vero. –

+4

È sicuro _oggi ._. Utilizzerai Reflector su ever release di .NET per assicurarti che continui a essere sicuro? Questa non è una soluzione. -1. –

+2

Sarà sempre al sicuro. Solo a causa della semantica dello scrittore. Pensa al motivo per cui è stato eliminato per ora (suggerisci gli esempi su msdn). Si noti inoltre che questo non è l'unico posto in .NET che usa in modo errato IDisposable, ad esempio conosco bene il problema di Dispose con i canali WCF. –

21

Nel caso di BinaryWriter, questa non è un'opzione diretta (anche se alcuni wrapper di flusso consentono di controllare questo, ad esempio GZipStream ecc.).

Jon ha un NonClosingStreamWrapper in MiscUtil che dovrebbe funzionare: si avvolge lo stream nel wrapper non di chiusura e si consegna il wrapper a BinaryWriter. Questo essenzialmente passa attraverso tutto eccetto Close() e Dispose().

+0

grande biblioteca, bel lavoro! –

+0

Link non funzionante: http://www.yoda.arachsys.com/csharp/miscutil/ – colithium

+0

Non pensi che ci sia un po 'di trucco? Suggerisci di modificare il comportamento (e le ipotesi) di BinnaryWriter ingannandolo con il wrapper? –

9

Il metodo protetto BinaryWriter.Dispose (bool) è virtuale e tutto ciò che fa è chiudere lo stream (è possibile verificare che sia vero in Reflector). -Questo metodo è chiamato dal metodo Dispose().

È possibile ereditare semplicemente una classe da BinaryWriter e sovrascrivere il metodo Dispose (bool) per non eseguire nulla o qualcos'altro.

47

A partire da .NET 4.5, la classe BinaryWriter ha un nuovo costruttore che accetta un parametro booleano per indicare se lasciare aperto il flusso o meno.

Rif: http://msdn.microsoft.com/en-us/library/gg712841.aspx

public BinaryWriter(
    Stream output, 
    Encoding encoding, 
    bool leaveOpen 
) 
+0

Felice di aver fornito queste informazioni più recenti. Grazie! –

Problemi correlati