StreamWriter не записывает данные в .txt

пытаюсь запаковать поток в архив, который собственно в памяти

public static byte[] sWrite(List<Play> Player)
{

}
//
List<Play> player = Online.Get(server);
//


using var mem = new MemoryStream { Position = 0 };
{
    var streamWriter = new StreamWriter(mem)
    streamWriter.Write(cSer.sWrite(player)); //cSer - class 
    streamWriter.Flush();
    mem.ToArray();
} 

с помощью

storer.AddStream(ZipStorer.Compression.Deflate, $"{bSavePath}" + $"\\text_{name}({GenStrings.GenNumbersTo()}).txt", mem, DateTime.Now, null);

только вот текстовый файл в архиве пустой =(

но когда использую

var mem = new MemoryStream(cSer.sWrite(player).ToArray());

создаётся текстовый файл в архиве, с данными в ней. мне обязательно надо использовать первый вариант с StreamWriter, как быть?


Ответы (1 шт):

Автор решения: aepot

После записи в поток с помощью mem.Write, надо позицию возвращать на начало перед последующим чтением.

using (var mem = new MemoryStream())
{
    byte[] data = cSer.sWrite(player);
    mem.Write(data, 0, data.Length);
    mem.Position = 0;
    storer.AddStream(...);
}

С .ToArray() работает, потому что позиция не влияет на этот метод.

Кстати, непонятно, зачем вам StreamWriter. Если надо записать в архив массив байт как поток, то вот этот код выглядит совершенно нормально:

var mem = new MemoryStream(cSer.sWrite(player));
→ Ссылка