C# 在ftp二进制文件上上载xml文件
我有代码,我将xml文件发送到ftp服务器,但ftp服务器上的文件比原始文件小。我试图启用二进制传输,但结果仍然是一样的C# 在ftp二进制文件上上载xml文件,c#,file-upload,ftp,binary,C#,File Upload,Ftp,Binary,我有代码,我将xml文件发送到ftp服务器,但ftp服务器上的文件比原始文件小。我试图启用二进制传输,但结果仍然是一样的 FileInfo f = new FileInfo("C:\\Users\\L\\Desktop\\data.xml"); long original_vel = f.Length; FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://***");
FileInfo f = new FileInfo("C:\\Users\\L\\Desktop\\data.xml");
long original_vel = f.Length;
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://***");
request.UseBinary = true;
request.Method = WebRequestMethods.Ftp.GetFileSize;
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential("*****", "*****");
StreamReader sourceStream = new StreamReader(@"C:\\Users\\L\\Desktop\\data.xml");
byte[] fileContents = Encoding.Unicode.GetBytes(sourceStream.ReadToEnd());
sourceStream.Close();
request.ContentLength = fileContents.Length;
long ftp_vel = request.ContentLength;
Stream requestStream = request.GetRequestStream();
requestStream.Write(fileContents, 0, fileContents.Length);
requestStream.Close();
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
if (original_vel == ftp_vel)
{
response.Close();
}
else
{
Odesilani();
}
原始文件的大小为294672,但ftp上的文件大小为294670。
ftp上的xml文件是有效的…但是当我比较total comander中的文件时,原始文件有:FF FE 3C 00 3F 00…和ftp上的文件有3C 00 3F 00…
但是文件的内容还可以…:/
你知道吗?服务器上的XML文件有效吗?从代码中,您正在使用Unicode读取文件。使用unicode编码的文件通常具有一个字符,该字符位于名为的文件开头。这可能是2字节差异的原因,因为它在转换过程中丢失 UPDATE任何编码的正确字节顺序标记由
encoding.GetPreamble()
对上述代码的修复将是。。
StreamReader sourceStream = new StreamReader(@"C:\\Users\\L\\Desktop\\data.xml");
//Get Preamble and File Contents
byte[] bom = Encoding.Unicode.GetPreamble();
byte[] content = Encoding.Unicode.GetBytes(sourceStream.ReadToEnd());
//Create Destination array
byte[] fileContents = new Byte[bom.Length + content.Length];
//Copy arrays into destination appending bom if available
Array.Copy(bom, 0, fileContents, 0, bom.Length);
Array.Copy(content, 0, fileContents, bom.Length, content.Length);
request.ContentLength = fileContents.Length;
long ftp_vel = request.ContentLength;
Stream requestStream = request.GetRequestStream();
requestStream.Write(fileContents, 0, fileContents.Length);
requestStream.Close();
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
if (original_vel == ftp_vel)
{
response.Close();
}
else
{
Odesilani();
}
是的,xml文件是有效的……但是当我比较total comander中的文件时,原始文件有:FF FE 3C 00 3F 00……而ftp上的文件有3C 00 3F 00……但是文件的内容没有问题……::如果您仍然希望它与其余内容一起传输,则必须手动将其附加到字节数组的开头byte[]stuff=新字节[fileContents.Length+2]代码>数组.Copy(fileContents,0,stuff,2,fileContents.length)<代码>填充[0]=0xff代码>填充[1]=0xfe;fileContents=stuff;无法以二进制模式传输xml文件?因为当我尝试发送*.exe文件时,结果是可怕的:/也许你应该考虑使用Studio.NET.WebCube类。它对这些问题进行了抽象。