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

时间:2010-02-12 21:24:05

标签: c# ftp sftp ftpwebrequest

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

5 个答案:

答案 0 :(得分:9)

using System.Net;
// ...

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

回答更新的问题:

将流保存到磁盘的方式是错误的。您将流视为字符序列,这会破坏流程中的ZIP文件。打开FileStream而不是StreamWriter,然后使用my CopyStream function from here等内容将GetResponseStream()返回值直接复制到FileStream

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

如果您需要下载SSH或SSL加密,我建议使用此组件:http://www.weonlydo.com/index.asp?showform=FtpDLX.NET。对于普通FTP也很棒。

答案 4 :(得分:0)

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

Downloading ZIP file from FTP and copying to folder within website