Запись в MemoryStream из BinaryReader

У меня возникла проблема при попытке прочитать сохраненный список из двоичного файла обратно в список. файл зашифрован, без шифрования у меня не было проблем.

метод письма:

private void WriteEncodedFile(FileStream fileStream, MemoryStream memoryStream)
{
    StreamReader sr = new StreamReader(memoryStream);
    BinaryWriter bw = new BinaryWriter(fileStream);
    memoryStream.Seek(0, SeekOrigin.Begin);
    string data = sr.ReadToEnd();
    var bytes = Encoding.UTF8.GetBytes(data);
    for (int i = 0; i < bytes.Length; i++) bytes[i] ^= 0x5a;
    bw.Write(Convert.ToBase64String(bytes));
    bw.Close();
    fileStream.Close();
}

Метод чтения:

private void ReadEncodedFile(FileStream fileStream, MemoryStream memoryStream)
{
    BinaryReader br = new BinaryReader(fileStream);
    StreamWriter sw = new StreamWriter(memoryStream);
    fileStream.Seek(0, SeekOrigin.Begin);
    memoryStream.Seek(0, SeekOrigin.Begin);

    string base64 = br.ReadString();
    byte[] bytes = Convert.FromBase64String(base64);
    for (int i = 0; i < bytes.Length; i++) bytes[i] ^= 0x5a;
    string decodedData = Encoding.UTF8.GetString(bytes);
    sw.Write(decodedData);
}

при чтении контента я вижу его в "decodedData". однако StreamWriter, кажется, не записывает его в MemoryStream.

любая идея?

Благодарю.

1 ответ

Я думаю, что вы просто не очищаете / не закрываете поток перед проверкой.

sw.Flush();

или же

sw.Close();

если сделано

и fileStream.Close(); за хорошую практику тоже

Редактировать: учитывая комментарий, вам нужно снова попытаться запустить поток памяти перед десериализацией, т.е. memoryStream.Seek(0, SeekOrigin.Begin); где бы ты ни делал это

Другие вопросы по тегам