Gratta la risposta precedente - Non avevo notato che stavi usando due wrapper attorno allo stesso flusso. Mi sembra alquanto rischioso.
In entrambi i casi, inserisco gli StreamWriter
e BinaryWriter
nei rispettivi blocchi using
.
Oh, e sì, è legale chiamare ToArray()
su MemoryStream
- i dati vengono conservati anche dopo che è stato eliminato.
Se davvero si vuole utilizzare i due involucri, lo farei in questo modo:
using (MemoryStream stream = new MemoryStream())
{
using (StreamWriter normalWriter = new StreamWriter(stream))
using (BinaryWriter binaryWriter = new BinaryWriter(stream))
{
foreach(...)
{
binaryWriter.Write(number);
binaryWriter.Flush();
normalWriter.WriteLine(name); //<~~ easier to read afterward.
normalWriter.Flush();
}
}
return MemoryStream.ToArray();
}
devo dire, io sono un po 'diffidenti nei confronti di utilizzare due involucri intorno allo stesso flusso però. Dovrai continuare a lavare ciascuno di essi dopo ogni operazione per assicurarti di non finire con dati dispari. Si potrebbe impostare AutoFlush
proprietà s' il StreamWriter
su true per mitigare la situazione, e io credo che BinaryWriter
attualmente non realtà richiedono risciacquo (vale a dire che non tutti i dati del buffer), ma basandosi su che si sente a rischio.
Se si devono combinare dati binari e di testo, utilizzare uno BinaryWriter
e scrivere esplicitamente i byte per la stringa, recuperandolo con Encoding.GetBytes(string)
.
fonte
2009-06-29 16:18:54
Il wrapping di un flusso con due stream writer sembra pericoloso/soggetto a errori sebbene non ritenga che il flushing farà nulla in questo caso. Flush non influenza la lettura di MemoryStream, ma solo la scrittura dei byte bufferizzati nei rispettivi stream. – mbillard
Influisce sull'ordine in cui i valori possono essere scritti sebbene - a meno che non si imposti AutoFlush su true, StreamWriter non può scrivere nulla su MemoryStream per un lungo periodo (o * mai * se non lo si dispone). Mi sembra fragile. –
la cosa è, voglio una nuova riga alla fine del nome, e WriteLine sembra il modo sicuro per farlo. – Nefzen