1
내 프로그램의 아이디어는 사용자가 자신의 데이터를 클라우드에 저장할 수있게하는 것입니다. 데이터는 이진 직렬화 파일에 저장됩니다.이진 직렬화 된 파일 업로드 문제
직렬화 코드 그래서 다음과 같습니다
FileStream Stream = new FileStream(..., FileMode.Create); // create stream
BinaryFormatter Formatter = new BinaryFormatter(); // create formatter
Formatter.Serialize(Stream, ObjectToSerialize); // serialize
Stream.Close();
문제는 그 다음 코드, 직렬화 된 파일을 업로드 할 때이다 :
FtpWebRequest Request = (FtpWebRequest)WebRequest.Create(new Uri(...));
Request.Method = WebRequestMethods.Ftp.UploadFile;
Request.Credentials = new NetworkCredential(..., ...);
string Path = System.IO.Path.GetDirectoryName(...;
StreamReader SourceStream = new StreamReader(Path);
Request.UseBinary = true;
byte[] FileContents = Encoding.Default.GetBytes(SourceStream.ReadToEnd());
SourceStream.Close();
Request.ContentLength = FileContents.Length;
Stream RequestStream = Request.GetRequestStream();
RequestStream.Write(FileContents, 0, FileContents.Length);
RequestStream.Close();
FtpWebResponse Response = (FtpWebResponse)Request.GetResponse();
Response.Close();
파일 인코딩 변경 (나는 확실하지 않다 그 .. 인코딩 문제가 있지만 그렇게 생각한다면) 더 이상 파일을 deserialize 수없는, 예외가 발생합니다. 파일을 손상시키지 않는 방법에 대해 알고 있습니까?
최고 감사합니다.
자세한 내용이 필요합니다. 우리에게 예외를 보여주십시오. –
이것은 귀하의 질문에 직각이지만, ** 당신은 정말 BinaryFormatter **를 사용하고 싶지 않습니다. 일단 클라이언트를 업그레이드하면 많은 문제가 생길 것입니다. XML이나 Json과 같은 다른 유형의 직렬화 형식을 조사해야합니다. BinaryFormatter는 시스템의 다른 모듈 간 전송 형식으로, 시스템의 한 부분을 업그레이드 할 수있는 저장 형식이 아닙니다. –
Lasse가 말한 것을 계속하려면 ... 또는 proto-buf.net과 같이 어셈블리 버전에 묶이지 않은 바이너리 형식을 사용하십시오. –