webclient.downloadfileasyncを使用してダウンロードされたファイルに0kbがあります
-
27-10-2019 - |
質問
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を送信してそのサイズをチェックしていました。問題は、応答を閉じなかったことです。
答えをありがとう、彼らは素敵な手がかりでした。
を処理してみてください 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!!!");
}
次の行のWindows「C: Temp.Zip」でUACを有効にしている場合、アクセス許可なしでユーザーディレクトリの外部から書き込むことが許可されていないため、ファイルの保存に失敗します。
downloader.DownloadFileAsync(new Uri(url), "C:\\temp.zip");