2013-05-14 58 views
1

使用下面的代碼來下載文件0字節的文件:如何避免在Web客戶端下載錯誤

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

和下載過程中發生錯誤(沒有互聯網連接,文件未找到,等) 它會在本地路徑/文件中分配一個0字節的文件,這會變得非常煩人。

有沒有辦法避免這種乾淨的方式?

(我已經只是探測0字節的文件上下載錯誤並刪除它,但我不認爲這是推薦的解決方案)

回答

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(); 
+0

好吧,我不喜歡這個解決方案100%,因爲我必須照顧寫作自己,但它仍然比我目前的方法更好。順便說一句,你如何逆向工程編譯.net代碼? – clamp 2013-05-14 13:37:44