上传二进制序列化文件时出现问题
本文关键字:问题 文件 二进制 序列化 | 更新日期: 2023-09-27 18:02:48
我的程序的思想是允许用户将他的数据保存在云中。数据存储在二进制序列化的文件中。
序列化代码看起来像这样:
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();
文件编码改变(我不确定…如果编码是问题,但我认为是这样),我不能再反序列化文件,发生异常。你知道怎样才能不损坏文件吗?
致以最亲切的问候!
编码仅适用于文本,并且这里处理的是二进制文件。您不应该尝试将其作为字符串读取。"编码已更改",因为您使用的是Encoding.Default
,这取决于您的操作系统的当前配置。
把代码改成:
string Path = System.IO.Path.GetDirectoryName(...);
// StreamReader SourceStream = new StreamReader(Path);
// Request.UseBinary = true;
byte[] FileContents = File.ReadAllBytes(Path);
// SourceStream.Close();