Come discussed before, quando un BinaryReader o BinaryWriter viene chiuso, anche il suo Stream sottostante viene chiuso (aargh). Prendi in considerazione questa situazione: una routine R
riceve un MemoryStream, ad esempio M
; Vorrei scrivere alcune cose su M
e poi passarlo a un'altra routine per ulteriori elaborazioni (non necessariamente scrivere). Per comodità, mi piacerebbe avvolgere M
in un BinaryWriter per scrivere. Dopo aver scritto, ho finito con il BinaryWriter ma non con M
.Come si "forchetta" un flusso in .NET?
void R(MemoryStream M)
{
using (B = new BinaryWriter(M))
{
// write some stuff using B
}
S(M); // now pass M to another routine for further processing
}
Ma, non posso smaltire la BinaryStream senza chiudere M
.
D: Esiste un modo per eseguire una delle seguenti azioni?
- estrarre il byte sottostante [] da un MemoryStream,
- clone un flusso
- riapre un flusso dopo che è stato chiuso
Non conosco C#, ma in Java, basta semplicemente abbandonare senza chiudere BinaryWriter. L'uso della forza costruttiva {}} non si chiude? Quindi non usare quel costrutto! –
P.S. Ma devi assicurarti di scaricare BinaryWriter prima di abbandonarlo. –