2012-11-30 274 views
0

我必须使用c#代码从ftp下载zip文件。 我已经使用了下面的代码。如何从Ftp下载Zip文件#

 Uri url = new Uri("ftp://ftpurl"); 
     if (url.Scheme == Uri.UriSchemeFtp) 
     { 

      FtpWebRequest objRequest = (FtpWebRequest)FtpWebRequest.Create(url); 
      //Set credentials if required else comment this Credential code 
      NetworkCredential objCredential = new NetworkCredential(userid, Pwd); 
      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(@"E:\ftpwrite", 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(); 

     } 

但是这个代码不给我正确的反应,我想保存从FTP文件和该代码是从文件中的字节写入数据到我的文件。 我的文件是一个zip文件而不是文本文件。 请帮助我该怎么做,或者我误解了。

+2

为什么您使用'StreamReader'?你不直接从它读取 - 只能从它的'BaseStream'中读取。为什么不使用流? –

+1

你需要更具体一些,“不给我正确答案”还不够清楚。出了什么问题?你没有得到完整的文件吗? – ryadavilli

+0

我不确定我是否正确理解问题,但您是否尝试了E:\ ftpwrite.zip? –

回答

1

我的这是这是事实,你正在使用StreamReader。它有可能在构建时从流中读取以尝试确定编码。因为你不是真的使用它 - 只是BaseStream - 它是毫无意义的,导致代码不清晰。

只需使用:

Stream inputStream = objResponse.GetResponseStream(); 

此外,你应该使用using报表所有流和响应。

哦,如果你使用.NET 4或更高版本,请使用Stream.CopyTo来节省一些时间。

0

如果你不反对使用免费的第三方库,你可以http://www.enterprisedt.com/products/edtftpnet/download.html

它使访问FTP IMO简单了很多使用。示例代码(从其documentation采取并稍作修改):

using (FTPConnection ftp = new FTPConnection()) 
{ 
    ftpConnection.ServerAddress = "myserver"; 
    ftpConnection.UserName = userName; 
    ftpConnection.Password = password; 
    ftpConnection.Connect(); 
    ftpConnection.DownloadFile(localFilePath, remoteFileName); 
}