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 に答える