2

次のコードを使用してファイルをダウンロードする場合:

WebClient wc = new WebClient();
wc.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(wc_DownloadFileCompleted);
wc.DownloadFileAsync("http://path/file, "localpath/file");

ダウンロード中にエラーが発生すると (インターネット接続がない、ファイルが見つからないなど)、localpath/file に 0 バイトのファイルが割り当てられ、非常に煩わしくなります。

それをきれいに回避する方法はありますか?

(私はすでにダウンロードエラーで0バイトのファイルを調べて削除していますが、それが推奨される解決策だとは思いません)

4

1 に答える 1

3

コードをリバース エンジニアリングすると、ダウンロードが始まる前に がインスタンス化さWebClient.DownloadFileれていることがわかります。FileStreamこれが、ダウンロードが失敗してもファイルが作成される理由です。そのコードを修正する方法はないため、別のアプローチを検討する必要があります。

この問題に取り組むには多くの方法があります。ダウンロードが完了し、必要なデータが確実にある場合は、ファイルを作成または書き込むだけWebClient.DownloadDataでなく、使用することを検討してください。WebClient.DownloadFile

WebClient client = new WebClient();

client.DownloadDataCompleted += (sender, eventArgs) =>
{
    byte[] fileData = eventArgs.Result;
    //did you receive the data successfully? Place your own condition here. 
    using (FileStream fileStream = new FileStream("C:\\Users\\Alex\\Desktop\\Data.rar", FileMode.Create))
        fileStream.Write(fileData, 0, fileData.Length);
};

client.DownloadDataAsync(address);
client.Dispose();
于 2013-05-14T13:13:27.703 に答える