2011-12-13 3 views
0

私はFTPサーバーにzipファイルを持っていますが、このzipファイルには1つ以上のxmlファイルが含まれています。このzipファイルをダウンロードしてローカルディスクに保存したい、ファイルが、私はそれは私がそのファイルが破損しているエラーをスローこのzipファイルを解凍しよう......ZipFileをダウンロードするには

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(_remoteHost + file); 
request.Method = WebRequestMethods.Ftp.DownloadFile; 
request.Credentials = new NetworkCredential(_remoteUser, _remotePass); 
FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 
Stream responseStream = response.GetResponseStream(); 
StreamReader reader = new StreamReader(responseStream); 

StreamWriter writer = new StreamWriter(destination); 
writer.Write(reader.ReadToEnd()); 

writer.Close(); 
reader.Close(); 
response.Close(); 
+0

はあなたが必要とするFTPサーバーからのファイルのダウンロードのためのサンプルコードです。どんな言葉ですか? – Almo

+0

あなたはhttp://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.aspxを見ましたか? –

答えて

3

あなたはStreamReaderを通じてFTP要求の結果をチャネリングしている:再ここで、このような質問です。これは文字エンコーディングを処理するのに通常有益な効果がありますが、バイナリデータ(つまりzipファイル)を扱うときにやりたいことではありません。代わりに、ストリームから直接データを読み取る必要があります。ような何か:ここ

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(_remoteHost + file); 
request.Method = WebRequestMethods.Ftp.DownloadFile; 
request.Credentials = new NetworkCredential(_remoteUser, _remotePass); 
FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 
Stream responseStream = response.GetResponseStream(); 

// Copy the data from the responseStream to destination 1k at a time (feel free to increase buffer size) 
byte[] buffer = new byte[1024]; 
for (int amountRead = responseStream.Read(buffer, 0, buffer.Length); amountRead > 0; amountRead = responseStream.Read(buffer, 0, buffer.Length)) 
{ 
    destination.Write(buffer, 0, amountRead); 
} 
destination.Flush(); 

response.Close(); 
+0

この結果をASP.netページの応答に戻す場合は、「宛先」変数Response.AppendHeader( "Content-Disposition"、 "attachment; filename =" + filename); Page Response です。 Response.ContentType = "application/x-zip-compressed"; ストリームの宛先= Response.OutputStream; –

1

は、より多くの私たちに伝えるために

Uri url = new Uri("ftp://ftp.demo.com/file1.txt"); 
if (url.Scheme == Uri.UriSchemeFtp) 
{ 
    FtpWebRequest objRequest = (FtpWebRequest)FtpWebRequest.Create(url); 
    //Set credentials if required else comment this Credential code 
    NetworkCredential objCredential = new NetworkCredential("FTPUserName", "FTPPassword"); 
    objRequest.Credentials = objCredential; 
    objRequest.Method = WebRequestMethods.Ftp.DownloadFile; 
    FtpWebResponse objResponse = (FtpWebResponse)objRequest.GetResponse(); 
    StreamReader objReader = new StreamReader(objResponse.GetResponseStream()); 
    byte[] buffer = new byte[16 * 1024]; 
    int len = 0; 
    FileStream objFS = new FileStream(Server.MapPath("file1.txt"), FileMode.Create, FileAccess.Write, FileShare.Read); 
    while ((len = objReader.BaseStream.Read(buffer, 0, buffer.Length)) != 0) 
    { 
     objFS.Write(buffer, 0, len); 
    } 
    objFS.Close(); 
    objResponse.Close(); 
} 
関連する問題