0

У меня возникла проблема при попытке прочитать сохраненный список из двоичного файла обратно в список. файл зашифрован, без шифрования у меня не было проблем.Запись в 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.

любая идея?

спасибо.

ответ

0

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

sw.Flush(); 

или

sw.Close(); 

если сделано

и fileStream.Close(); для хорошей практики слишком

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

+0

при добавлении sw.Flush я получаю следующую ошибку: System.Runtime.Serialization.SerializationException: конец потока, встречающийся до разбора, был завершен. на Deserializer: dataList = (Список ) bFormatter.Deserialize (ms); – Tomerz