Ho un metodo che riceve un flusso per scrivere su di esso utilizzando un BinaryWriter. Ma quando dispongo questo BinaryWriter, chiude anche il flusso. Posso lasciarlo non esposto così posso lasciare il mio stream aperto?Perché un BinaryWriter chiude il flusso esterno a disposizione e come prevenirlo? (.NET C#)
risposta
Basta non chiamare Dispose, usare Flush invece, è sicuro.
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()
.
grande biblioteca, bel lavoro! –
Link non funzionante: http://www.yoda.arachsys.com/csharp/miscutil/ – colithium
Non pensi che ci sia un po 'di trucco? Suggerisci di modificare il comportamento (e le ipotesi) di BinnaryWriter ingannandolo con il wrapper? –
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.
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
)
Felice di aver fornito queste informazioni più recenti. Grazie! –
- 1. C# BinaryWriter - e endianness
- 2. Come trovare deadlock e prevenirlo in C#
- 3. Come si "forchetta" un flusso in .NET?
- 4. C# .NET e traduzione di componente esterno
- 5. Monitoraggio C# /. NET compiti flusso
- 6. .NET: come avere Escape chiude un MessageBox.Show()?
- 7. Quando chiude un flusso se non viene chiuso manualmente?
- 8. Perché un errore RaceOnRCWCleanup quando si chiude un modulo con il controllo WebBrowser su di esso?
- 9. qual è la differenza tra uno streamwriter e un binarywriter?
- 10. disposizione del testo intorno a un div
- 11. BinaryWriter Endian issue
- 12. Flusso di lavoro da C++ a C
- 13. Come convertire System.Data.Linq.Binary in un flusso?
- 14. Perché un uint64_t ha bisogno di più memoria di 2 uint32_t quando utilizzato in una classe? E come prevenirlo?
- 15. Come reindirizzare in modo asincrono SOLO il flusso di errore standard e non il flusso di output standard di un processo in C#, .net
- 16. C - passando da ncurses ui a programma esterno e ritorno
- 17. Incorporamento di un eseguibile esterno all'interno di un programma C#
- 18. Perché la funzione linee chiude il percorso in R?
- 19. Perché Dapper dot net non apre e chiude la connessione stessa?
- 20. WebFaultException errato quando si utilizza un flusso e si chiude lo stream
- 21. Come si "chiude" un ClassLoader?
- 22. Abbiamo bisogno di chiudere un C# BinaryWriter o BinaryReader in un blocco using?
- 23. Risorsa dal montaggio come flusso
- 24. XMLStreamReader e un flusso reale
- 25. L'operazione di raccolta su Stream chiude il flusso e le risorse sottostanti?
- 26. Passare un lambda a un AppDomain secondario come un flusso di IL e riassemblarlo utilizzando DynamicMethod
- 27. perché usare javascript esterno?
- 28. Flusso C++ come variabile membro
- 29. Perché il thread win32 non si chiude automaticamente?
- 30. C++ collega il flusso di output al flusso di input
Sì, l'ho controllato su Reflector ed è vero. –
È sicuro _oggi ._. Utilizzerai Reflector su ever release di .NET per assicurarti che continui a essere sicuro? Questa non è una soluzione. -1. –
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. –