Поцарапайте предыдущий ответ - я не заметил, что вы использовали две обертки вокруг одного потока. Для меня это несколько рискованно.
В любом случае, я бы поместил StreamWriter
и BinaryWriter
в их собственные using
блоки.
О, да, дозвониться до ToArray()
на MemoryStream
законно - данные сохраняются даже после их удаления.
Если вы действительно хотите использовать две оболочки, я бы сделал это так:
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();
}
Я должен сказать, что я несколько опасаюсь использовать две обертки вокруг одного и того же потока. Вы должны будете сбрасывать каждый из них после каждой операции, чтобы убедиться, что вы не получите нечетные данные. Вы можете установить для свойства StreamWriter
AutoFlush
значение true, чтобы смягчить ситуацию, и я считаю , что BinaryWriter
в настоящее время не на самом деле требуется очистка (т. е. не буферизировать какие-либо данные), но полагаться на это кажется рискованным.
Если вам нужно смешать двоичные и текстовые данные, я бы использовал BinaryWriter
и явно записал байты для строки, получив ее с помощью Encoding.GetBytes(string)
.