0

i am having an issue when trying to read saved List from binary file back to a List. the file is encrypted, without encryption i had no problem.

writing method:

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

Reading method:

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

when reading the content i can see it in the "decodedData". however the StreamWriter seems not to write it into the MemoryStream.

any idea?

thanks.

TTomer
  • 356
  • 2
  • 11

1 Answers1

0

I think you are simply not flushing/closing the stream before checking.

sw.Flush();

or

sw.Close();

if done

and fileStream.Close(); for good practice too

Edit: Considering the comment, you need to seek to start of memory stream again before deserialising i.e. memoryStream.Seek(0, SeekOrigin.Begin); where-ever you do it

WesternW
  • 1
  • 1
  • when adding sw.Flush i receive the following error: System.Runtime.Serialization.SerializationException: End of Stream encountered before parsing was completed. on the Deserializer: dataList = (List)bFormatter.Deserialize(ms); – TTomer Sep 21 '14 at 06:49