3

クラスを使用してWebClient、Web サーバーから .exe ファイルをダウンロードしています。ファイルをダウンロードするために使用しているコードは次のとおりです。

WebClient webClient = new WebClient();    
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(webClient_DownloadProgressChanged);
webClient.DownloadDataAsync(new Uri("http://www.blah.com/calc.exe")); 

webClient_DownloadProgressChanged私のアプリケーションには、コールバック ( )で更新される ProgressBar があります。

private void webClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
    progressBar.Value = (int)e.BytesReceived;
}

私が抱えている問題はMaximum、進行状況バーの値を動的に設定する必要があることです。つまり、ダウンロードを開始する前に、ダウンロードするファイルのサイズを知る必要があります。

ファイルのサイズを(ダウンロードする前に)取得する方法はありますか?

4

3 に答える 3

5

このように最大サイズを e.TotalBytesToReceive に設定してみてください

private void webClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
     progressBar.Max = (int)e.TotalBytesToReceive;
    progressBar.Value = (int)e.BytesReceived;

}
于 2013-01-07T10:43:14.103 に答える
2

方法の 1 つは、ResponseHeaders の Content-Length または Range ヘッダーをチェックすることです。

// To set the range
//webClient.Headers.Add("Range","bytes=-128");

// To read Content-Length
var bytes = Convert.ToInt64(webClient.ResponseHeaders["Content-Length"]);
于 2013-01-07T10:38:05.533 に答える