WebClientクラスは、単純化されたシナリオ用のクラスです。単純なシナリオを乗り越えたら(そしてそれができたら)、少しフォールバックしてWebRequestを使用する必要があります。
WebRequestを使用すると、応答ストリームにアクセスでき、完了するまで、応答ストリームをループして、少しずつ読み取り、書き込みを行うことができます。
Microsoftのドキュメントから:
新しい開発にWebRequestまたはその派生クラスを使用することはお勧めしません。代わりに、System.Net.Http.HttpClientクラスを使用してください。
ソース:docs.microsoft.com/WebRequest
例:
public void MyDownloadFile(Uri url, string outputFilePath)
{
const int BUFFER_SIZE = 16 * 1024;
using (var outputFileStream = File.Create(outputFilePath, BUFFER_SIZE))
{
var req = WebRequest.Create(url);
using (var response = req.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
var buffer = new byte[BUFFER_SIZE];
int bytesRead;
do
{
bytesRead = responseStream.Read(buffer, 0, BUFFER_SIZE);
outputFileStream.Write(buffer, 0, bytesRead);
} while (bytesRead > 0);
}
}
}
}
WebClient.DownloadFileが機能する場合、私はそれを最良の解決策と呼ぶことに注意してください。「DownloadFile」の回答が投稿される前に、上記を書きました。また、早朝に書いたので、一粒の塩(そしてテスト)が必要になるかもしれません。