2013-10-07 290 views
0

我試圖直接從網址列表下載文件。WebClient.DownloadFile文件損壞

我能夠成功下載大多數文件,除了.docx。我能夠下載.docx文件,但是當我嘗試打開它時,錯誤消息顯示"The file is corrupt and cannot be opened",當我嘗試用Microsoft Word修復它時,我收到另一條錯誤消息,說"Microsoft Office cannot open this file because some parts are missing or invalid"。當下載pdf文件時,我沒有任何問題。

我的代碼是非常簡單,它看起來像這樣:

WebClient webClient = new WebClient(); 
webClient.DownloadFile("http://somehost/somefile.docx", "C:\\somefolder\\somefile.docx"); 
webClient.Dispose(); //I added this line just to see if it will fix the problem but no it didn't 

我去了在瀏覽器的網址,並確保該文件確實存在,並沒有損壞。網址很好,我可以直接從瀏覽器的url下載文件,並打開文件。

附加信息:

我發現一件事是對PDF的URL和DOCX網址不同,但我真的不認爲這有什麼與我的問題。當我在瀏覽器中訪問pdf網址時,瀏覽器中顯示pdf。但是,當我轉到docx url時,該頁面不顯示任何內容,但該文件的下載會自動啓動。我不認爲這會有所作爲,但僅供參考。

EDIT上午10時38

我只是想異步方法。我能夠下載docx文件並打開它,但它顯示爲空白的word文檔,但仍然不正確。我從瀏覽器下載的相同docx文件確實有內容。

webClient.DownloadFileAsync(new Uri("http://somehost/somefile.docx"),"C:\\somefolder\\somefile.docx"); 
+1

該文件是公開的嗎?你需要特殊的憑據來訪問它嗎?餅乾等? – Arran

+0

@Arran這些文件都是公開的,它是一個免費的在線存檔站點 – sora0419

+1

不直接相關,但不是手動調用Dispose,而是查看'using'關鍵字。這是更好的練習! –

回答

0

謝謝大家的幫助,我真的很感激。

我意識到問題實際上是我沒有正確連接網址。對,我犯了一個愚蠢的錯誤...

WebClient沒有爲錯誤的格式(無論什麼原因)拋出錯誤,而且我的日誌文件沒有記錄我正在嘗試連接的實際URL,所以我沒有不知道這是做錯了什麼。

無論如何,謝謝大家的幫助和意見,幫助我找出問題所在。

+0

現在接受您的答案作爲答案,以便其他用戶不會再閱讀該問題。 – Shaharyar

+0

@Shaharyar我不能接受它,直到2天后 – sora0419

0

DownloadFileAsync在後臺下載文件,並且您的應用程序可能在下載完成之前終止。

您應該等待DownloadFileCompleted事件,或使用DownloadFile方法等待文件下載。