Как скачать ZIP-файл в C #? - PullRequest
       20

Как скачать ZIP-файл в C #?

15 голосов
/ 22 января 2011

Я использую HTTP GET, который загружает zip-файл в браузер, что-то вроде https://example.com/up/DBID/a/rRID/eFID/vVID (не точный URL)

Теперь, когда я пытаюсь выполнить ту же загрузку в коде C # (тот же метод GET, что и выше) для настольного приложения, загруженный zip-файл не является допустимым архивным файлом. Когда я открыл этот файл в блокноте, это была какая-то HTML-страница.

Я думаю, что неправильно настраиваю заголовок. Я посмотрел вокруг для примеров. Я нашел несколько загрузок, но ничего не увидел для загрузки.

Код:

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)
{
}

Ответы [ 2 ]

38 голосов
/ 22 января 2011

Это в основном потому, что вы используете StreamWriter : TextWriter для обработки двоичного файла Zip. StreamWriter ожидает текст и будет применять кодировку. И даже простой кодировщик ASCII может попытаться «исправить» то, что, по его мнению, является недействительными окончаниями строк.

Вы можете заменить весь свой код на:

  using (var client = new WebClient())
  {
    client.DownloadFile("http://something",  @"D:\Downloads\1.zip");
  }
7 голосов
/ 22 января 2011

Вы можете просто использовать WebClient для двухслойного:

using(WebClient wc = new WebClient())
{
   wc.DownloadFile(url, @"D:\Downloads\1.zip");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...