0

我在尝试从二进制文件读取保存列表返回列表时遇到问题。 该文件被加密,没有加密我没有问题。从BinaryReader写入MemoryStream

写作方法:

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();良好做法太

编辑: 考虑到评论,你需要寻求再次deserialising 即memoryStream.Seek(0,SeekOrigin.Begin)之前开始内存流的;在哪里你这样做

+0

当添加sw.Flush我收到以下错误: System.Runtime.Serialization.SerializationException:分析完成前遇到的流结束。 on the Deserializer: dataList =(List )bFormatter.Deserialize(ms); – Tomerz 2014-09-21 06:49:32