Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ftp二进制文件上上载xml文件_C#_File Upload_Ftp_Binary - Fatal编程技术网

C# 在ftp二进制文件上上载xml文件

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://***");

我有代码,我将xml文件发送到ftp服务器,但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类。它对这些问题进行了抽象。