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

如何使用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; 

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

回答更新的问题:

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

.NET Framework的System.Net命名空间提供了FTPWebRequest类。 这是一篇解释如何使用它的文章:

http://www.vcskicks.com/download-file-ftp.php

您可能希望使用FtpWebRequest类来下载.zip文件,然后使用System.IO.Packaging类来提取其内容。

解压缩的一个很好的替代方法是http://www.codeplex.com/DotNetZip 。

如果您需要下载SSH或SSL加密,那么我推荐这个组件: http : //www.weonlydo.com/index.asp?showform = ftpDL.NET 。 对于普通FTP也很棒。

对于那些发现这些答案无益的人,我在这里找到了一个更好的答案:

从FTP下载ZIP文件并复制到网站内的文件夹