Загруженный файл с использованием webclient.downloadfileasync имеет 0 кб

StackOverflow https://stackoverflow.com/questions/8373368

Вопрос

Я пытаюсь скачать Zend-Framework (из http://framework.zend.com/releases/zendframework-1.11.11/zendframework-1.11.11.zip) просто с помощью WebClient

string url = "http://framework.zend.com/releases/ZendFramework-1.11.11/ZendFramework-1.11.11.zip";
WebClient downloader= new WebClient();
downloader.DownloadFileAsync(new Uri(url), "C:\\temp.zip");

Файл создан, но он пуст. Я проверил ответ, используя Fiddler, и я получаю HTTP 200, правильную длину содержимого, но «соединение: закрыто» и Fiddler показывает «-1» в колонке «Body».

Я попытался добавить пользовательского агента (скопированного из Google Chrome запроса) и «Подключение: Keep-Alive» к заголовкам, но ни одно из них не помогло. Я также уверен, что моя программа загрузила этот файл, используя один и тот же URL -адрес один или два раза раньше. В событиях нет ошибок, запущенных WebClient.

Любые идеи?

Это было полезно?

Решение

Просто мое предположение: может быть, вы можете попытаться сохранить экземпляр WebClient в каком -то месте, не будет собранным мусором. Когда запущенное событие Download FileCopletled, вы просто очистите ссылку на экземпляр WebClient и позволяете GC восстановить память позже (и не забудьте вызвать метод утилизации).

Другие советы

ОК, я Финнее нашла ответ! Перед загрузкой файла я проверял его размер, отправив httpwebrequest. Проблема заключалась в том, что я не закрыл () ответ.

Спасибо за ответы, они были хорошими подсказками.

Попробуйте справиться DownloadProgressChanged а также DownloadFileCompleted мероприятие.

private void button1_Click(object sender, EventArgs e)
  {
   string url = "http://framework.zend.com/releases/ZendFramework-1.11.11/ZendFramework-1.11.11.zip";
   WebClient downloader = new WebClient();
   downloader.DownloadFileCompleted += new AsyncCompletedEventHandler(downloader_DownloadFileCompleted);
   downloader.DownloadProgressChanged += new DownloadProgressChangedEventHandler(downloader_DownloadProgressChanged);
   downloader.DownloadFileAsync(new Uri(url), "C:\\temp.zip");
  }

 void downloader_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
   {
      label1.Text = e.BytesReceived + " " + e.ProgressPercentage;
    }
  void downloader_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
   {
       if (e.Error != null)
         MessageBox.Show(e.Error.Message);
       else
         MessageBox.Show("Completed!!!");
   }

Если у вас включен UAC в Windows "C: temp.zip" в следующей строке не может сохранить файл, потому что вам не разрешено писать вне каталогов пользователей без повышенных разрешений:

downloader.DownloadFileAsync(new Uri(url), "C:\\temp.zip");
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top