0

我在尝试将保存的列表从二进制文件读回列表时遇到问题。该文件已加密,没有加密我没有问题。

写法:

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。

任何想法?

谢谢。

4

1 回答 1

0

我认为您根本没有在检查之前刷新/关闭流。

sw.Flush();

或者

sw.Close();

如果完成

和 fileStream.Close(); 为了良好的实践

编辑:考虑到评论,您需要在反序列化之前再次寻找内存流的开始,即 memoryStream.Seek(0, SeekOrigin.Begin); 无论你在哪里做

于 2014-09-20T22:43:02.907 回答