如何使用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;
答案 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类。这是一篇解释如何使用它的文章:
答案 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