如何使用C#通过FTP下载压缩文件(.zip)?

4

如何使用c#代码下载.zip文件格式?

这是我用来下载的代码。需要强调的是,如果我下载.txt文件,它可以正常工作。但是如果我下载.zip文件,它会下载.zip文件,但我无法打开它。它会报告.zip格式不正确。我怀疑我在将文件写回本地驱动器时出了问题。

有什么帮助吗?

string ftpServerIP = FTPServer;
string ftpUserID = FTPUser;
string ftpPassword = FTPPwd;
FileInfo fileInf = new FileInfo(FileName);
string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri); //new Uri("ftp://" + ftpServerIP + DestinationFolder + fileInf.Name));
reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
reqFTP.EnableSsl = true;
reqFTP.KeepAlive = false;
reqFTP.UseBinary = true;
//reqFTP.UsePassive = true;
reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);
//Stream strm = reqFTP.GetRequestStream();
StreamReader reader = new StreamReader(reqFTP.GetResponse().GetResponseStream());
StreamWriter writer = new StreamWriter(Path.Combine(FolderToWriteFiles, FileName), false);
writer.Write(reader.ReadToEnd());
return true; 

这个东西好用吗:http://www.dijksterhuis.org/webclient-class-upload-download-ftp-files/ - ziya
你可以安全地假设你已经使用独立的FTP客户端下载了文件,并且它是一个有效的zip文件吗? - Austin Salonen
@Austin Salonen。Zip文件是有效的。我可以在服务器上解压缩该文件。 - Jango
5个回答

9
using System.Net;
// ...

new WebClient().DownloadFile("ftp://ftp.someurl.com/file.zip",
                             "C:\\downloadedFile.zip");

更新问题的答案:

您保存流到磁盘的方式是错误的。您将流视为字符序列,这会在过程中损坏ZIP文件。请打开FileStream而不是StreamWriter,并直接将GetResponseStream()返回值复制到该FileStream中,使用类似于此处的我的CopyStream函数。


我可以使用FtpWebRequest类做些什么吗? - Jango
这假设FTP服务器不需要登录。如果FTP服务器需要登录,则FtpWebRequest类更适合。 - CodingWithSpike
@Mehrdad:请看我上面更新的问题/代码,并给出您最好的建议。谢谢 - Jango
抱歉,我得走了。现在已经五点了,我下周再试。祝你周末愉快。 - Jango
using (var fs = File.Create(Path.Combine(FolderToWriteFiles, FileName))) CopyStream(fs, reqFTP.GetResponse().GetResponseStream()); 替换最后几行。CopyStream 函数在我的回答中链接。 - Mehrdad Afshari
显示剩余8条评论

1

0

0

这是我使用的方式,对于通过FTP传输的zip文件,请确保使用FileStream! - JasonH

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接