如何使用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类。 这是一篇解释如何使用它的文章:
您可能希望使用FtpWebRequest类来下载.zip文件,然后使用System.IO.Packaging类来提取其内容。
解压缩的一个很好的替代方法是http://www.codeplex.com/DotNetZip 。
如果您需要下载SSH或SSL加密,那么我推荐这个组件: http : //www.weonlydo.com/index.asp?showform = ftpDL.NET 。 对于普通FTP也很棒。
对于那些发现这些答案无益的人,我在这里找到了一个更好的答案:
从FTP下载ZIP文件并复制到网站内的文件夹