2011-11-24 89 views
1

我从http://download.geonames.org/export/dump/下载3(2 zip 1 txt文件)文件使用WebClient和一个大小为9 Mb的zip文件,当我下载它的大小为215 MB并损坏时。使用WebRequest类和FileStream类,但再有同样的结果..损坏的zip文件,同时通过URL下载

我对替代Web客户端下载方法:

private void MyDownloadFile(Uri url, string outputFilePath) 
     { 
      const int BUFFER_SIZE = 16 * 1024; 
      using (var outputFileStream = File.Create(outputFilePath, BUFFER_SIZE)) 
      { 
       var req = WebRequest.Create(url); 
       using (var response = req.GetResponse()) 
       { 
        using (var responseStream = response.GetResponseStream()) 
        { 
         var buffer = new byte[BUFFER_SIZE]; 
         int bytesRead; 
         do 
         { 
          bytesRead = responseStream.Read(buffer, 0, BUFFER_SIZE); 
          outputFileStream.Write(buffer, 0, bytesRead); 
         } while (bytesRead > 0); 
        } 
       } 
      } 
     } 

private void DownloadFile(String Url, String ResultFileName) 
     { 
      HttpWebRequest wr = (HttpWebRequest)HttpWebRequest.Create(Url); 
      HttpWebResponse ws = (HttpWebResponse)wr.GetResponse(); 
      Stream str = ws.GetResponseStream(); 

      byte[] inBuf = new byte[100000]; 
      int bytesReadTotal = 0; 

      FileStream fstr = new FileStream(ResultFileName, FileMode.Create, FileAccess.Write); 

      while (true) 
      { 
       int n = str.Read(inBuf, 0, 100000); 
       if ((n == 0) || (n == -1)) 
       { 
        break; 
       } 

       fstr.Write(inBuf, 0, n); 

       bytesReadTotal += n; 
      } 

      str.Close(); 
      fstr.Close(); 
     } 

文件URL而破坏,同时下载:http://download.geonames.org/export/dump/allCountries.zip

任何人,有同样的问题,也可以写正确的方法pload这个zip文件?或者,也许我做错了什么?

+0

来看,'allCountries.zip' *应*约208M,不是9M。你确定你正在下载正确的文件吗? –

回答

2

如何使用在http://download.geonames.org/export/dump/的WebClient.DownloadFile方法(WebClient.DownloadFile

using (var wc = new WebClient()) 
{ 
    wc.DownloadFile(Url, ResultFileName); 
}