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

나는 당신이 단순히 확인하기 전에 스트림을 flush/closing하지 않는다고 생각한다.

을 수행하는 경우

sw.Flush(); 

또는

sw.Close(); 

및 fileStream.Close(); 좋은 연습 너무

편집 : 는 의견을 고려, 다시 즉 memoryStream.Seek (0, SeekOrigin.Begin를) deserialising 전에 메모리 스트림의 시작을 추구 할 필요가; where-ever do

+0

sw.Flush를 추가 할 때 다음 오류가 발생합니다. System.Runtime.Serialization.SerializationException : 구문 분석을하기 전에 발생한 스트림의 끝. 디시리얼라이저의 : dataList = (목록 ) bFormatter.Deserialize (ms); – Tomerz