如何在C#中下载zip文件?

问题描述:

我使用HTTP GET是下载一个浏览器中的zip文件,像https://example.com/up/DBID/a/rRID/eFID/vVID(没有确切的网址)如何在C#中下载zip文件?

现在,当我尝试了做在C#代码相同的下载(同上GET方法)桌面应用程序下载的zip文件不是有效的存档文件。当我用记事本打开这个文件时,它是一些HTML页面。

我想我没有正确设置标题。我四处寻找示例。我发现了几个wrt上传,但没有看到任何下载。

代码:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
request.Method = "GET"; 
request.ContentType = "application/zip"; 
try 
{ 
    HttpWebResponse res = (HttpWebResponse)request.GetResponse(); 
    using (StreamReader sr = new StreamReader(res.GetResponseStream(), System.Text.Encoding.Default)) 
    { 
     StreamWriter oWriter = new StreamWriter(@"D:\Downloads\1.zip"); 
     oWriter.Write(sr.ReadToEnd()); 
     oWriter.Close(); 
    } 
    res.Close(); 
} 
catch (Exception ex) 
{ 
} 
+4

这是一个难以猜测的“它不工作”的问题。发布代码,记录您在十六进制查看器中打开文件时看到的内容。 – 2011-01-22 16:31:04

这主要是因为您使用StreamWriter : TextWriter处理二进制Zip文件。 StreamWriter需要文本并应用编码。甚至简单的ASCII编码器也可能试图“修复”它认为无效的行结束符。

您可以取代所有代码:

using (var client = new WebClient()) 
    { 
    client.DownloadFile("http://something", @"D:\Downloads\1.zip"); 
    } 
+0

哦,是的,我可以在那里看到同样的问题。 – 2011-01-22 16:40:37

+0

+1打我 - @Al:我测试了一个zip文件,它工作得很好,你确定文件本身没有损坏吗? – BrokenGlass 2011-01-22 16:45:58

你可以只使用WebClient为2班轮:

using(WebClient wc = new WebClient()) 
{ 
    wc.DownloadFile(url, @"D:\Downloads\1.zip"); 
}