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 ファイルが破損します。a のFileStream代わりに aを開き、ここからmy function のようなものを使用して戻り値を直接StreamWriterコピーします。GetResponseStream()FileStreamCopyStream

于 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 に答える