webclient.downloadfileasyncを使用してダウンロードされたファイルに0kbがあります

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、正しいコンテンツレングスですが、「接続:閉じ」とフィドラーが「ボディ」列で「-1」を表示します。

ユーザーエージェント(Google Chromeリクエストからコピー)と「Connection:Keep-Alive」をヘッダーに追加してみましたが、これらはどれも役に立ちませんでした。また、私のプログラムが同じURLを1回または2回使用してこのファイルをダウンロードしたこともかなり確信しています。 WebClientによって発射されたイベントにエラーはありません。

何か案は?

役に立ちましたか?

解決

私の推測:たぶん、あなたはある場所でWebClientインスタンスを維持しようとすることができるかもしれません。ダウンロードFileCompletedイベントが発射されたら、WebClientインスタンスへの参照をクリーニングし、GCにメモリを後で回収させます(また、処分方法を呼び出すことを忘れないでください)。

他のヒント

わかりました、私はFinnalyが答えを見つけました!ファイルをダウンロードする前に、httpwebrequestを送信してそのサイズをチェックしていました。問題は、応答を閉じなかったことです。

答えをありがとう、彼らは素敵な手がかりでした。

を処理してみてください DownloadProgressChangedDownloadFileCompleted イベント。

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!!!");
   }

次の行のWindows「C: Temp.Zip」でUACを有効にしている場合、アクセス許可なしでユーザーディレクトリの外部から書き込むことが許可されていないため、ファイルの保存に失敗します。

downloader.DownloadFileAsync(new Uri(url), "C:\\temp.zip");
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top