私の Windows アプリケーションでは、WebClient DownloadFile メソッドを使用して、ローカル ネットワーク上のサーバーから複数の PDF ファイルをダウンロードしています。
各ファイルは、その URL が呼び出されたときに生成されるレポートです。レポートはサイズが異なり、生成されるまでにかかる時間も異なります。
私のコードは URL のリスト (約 400) をループし、各 URL に対して DownloadFile メソッドを呼び出し、対応するレポートが生成されてローカル マシンにダウンロードされます。URL は間違いなく正しいです。
問題は、アプリケーションを実行するたびに、ダウンロードしたファイルの一部が破損し、7KB しかダウンロードされず (メタデータ用だと思います)、ファイルを開こうとすると Acrobat Reader から次のメッセージが表示されることです。ファイルの種類がサポートされていないか、ファイルが破損している可能性があります...」</p>
損傷を受けるのは常に同じファイルであるとは限りません。アプリケーションを再実行すると、それらのファイルは成功することが多く、他のファイルは失敗する可能性があります。
注 1: 優先順位が完全にダウンロードされるまでファイルのダウンロードを開始したくないため、非同期メソッドを使用していません。注 2: すべてのファイルは Oracle レポートであり、データベースにクエリを実行することによって生成されます。注 3: ファイルが破損している場合、例外はスローされません。
これが私のコードです:
using ( WebClient client = new WebClient() )
{
for(int i=0; i< URL_List.Length; i++)
{
try
{
client.DownloadFile( URL_List[i] , myLocalPath+fileName+".pdf" );
}
catch(Exception x)
{
// write exception message to error log...
}
}
}
前もって感謝します。