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));