我上传到FTP的文件出现C#问题

本文关键字:问题 文件 FTP | 更新日期: 2023-09-27 17:58:38

当我将文件上传到FTP(zip或gif)文件时,我遇到了一个非常奇怪的问题。

我正在创建一个带有代码的zip文件,并将其与代码一起上传到FTP。当我在本地磁盘上创建这些文件时,我可以打开任何类型的文件。但是,当我将其中任何一个上传到FTP并下载时,它会向我显示一条关于.zip文件的消息,称为"意外的存档结束",以及在我下载它们并尝试在XP Windows图片和传真查看器中打开后的.gif文件类型的消息"绘图失败":

我使用此代码上传到FTP:

 FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://ftp.tim.com/" + fileName);
                request.Method = WebRequestMethods.Ftp.UploadFile;
            // This example assumes the FTP site uses anonymous logon.
            request.Credentials = new NetworkCredential(ftpuser,ftppass);
            // Copy the contents of the file to the request stream.
            StreamReader sourceStream = new StreamReader(filePath +"''"+ fileName);
            byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
            sourceStream.Close();
            request.ContentLength = fileContents.Length;
            request.KeepAlive = false;
            Stream requestStream = request.GetRequestStream();
            requestStream.Write(fileContents, 0, fileContents.Length);
            requestStream.Close();
            FtpWebResponse response = (FtpWebResponse)request.GetResponse();
            response.Close();

我上传到FTP的文件出现C#问题

此代码:

StreamReader sourceStream = new StreamReader(filePath +"''"+ fileName);
byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());

您正在以特定编码(UTF8)的文本形式读取字节流。。。但是GIF和ZIP是二进制文件,而不是文本文件。编码正在破坏它们。

尝试使用ReadAllBytes:

byte[] fileContents = File.ReadAllBytes("filepath");

您正在将二进制数据读取到字符串(假设为utf8)并将其转换回字节数组。这是完全错误的。