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; 
4

5 回答 5

9
using System.Net;
// ...

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

回答更新的问题:

您将流保存到磁盘的方式是错误的。您将流视为字符序列,这会破坏过程中的 ZIP 文件。打开 aFileStream而不是 aStreamWriter并将GetResponseStream()返回值直接复制到FileStream使用类似my CopyStreamfunction from here 的东西。

于 2010-02-12T21:28:42.423 回答
1

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

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

于 2010-02-12T21:29:03.780 回答
0

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

于 2010-02-12T21:33:22.917 回答
0

解压缩的一个很好的选择是http://www.codeplex.com/DotNetZip

如果您需要下载 SSH 或 SSL 加密,那么我推荐这个组件:http ://www.weonlydo.com/index.asp?showform=FtpDLX.NET 。也非常适合普通的 FTP。

于 2010-02-12T21:57:28.417 回答
0

对于所有发现这些答案没有帮助的人,我在这里找到了更好的答案:

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

于 2013-04-18T17:17:58.607 回答