2016-09-27 131 views
2

如何爲'已損壞'的文件引發錯誤,但它們不存在於搜索的文件夾中〜$ test.docx 我可以以某種方式忽略這些文件?Readin wordfiles該文件似乎已損壞

string path ="D:/Users/Bole/TSM/"; 
     foreach (string file in Directory.EnumerateFiles(path,"*.docx")) 
     { 
      { 
       //Open the doc File 
       var wordApplication = new Microsoft.Office.Interop.Word.Application(); 
       var document = wordApplication.Documents.Open(file); 
+0

它們是臨時文件,並以'〜$'爲前綴。 [有一個微軟支持文檔](https://support.microsoft.com/en-ie/kb/211632)解釋它們與Word的關係。 – Petesh

+0

@Petesh我怎麼能忽略它? – TamoDaleko

+0

我需要糾正自己的〜$文件;他們實際上是「所有者」文件以指示誰在打開文件。然而rory.ap的更正答案應該覆蓋它。 – Petesh

回答

2

這可能是這麼簡單,如果我理解正確你:

var fileInfo = new FileInfo(file); 

if (!fileInfo.Name.StartsWith("~$")) 
{ 
    var wordApplication = new Microsoft.Office.Interop.Word.Application(); 
    var document = wordApplication.Documents.Open(file);  
} 

另外(如帕納約蒂斯Kanavos指出的),你是不是用Directory.EnumerateFiles()用做自己任何好處foreach。原因在於,每次循環時,枚舉器的MoveNext方法都會調用FindNextFile(),這樣新文件就會出現在結果中。由於新~$...docx文件被創建每到這個語句運行時間(見this對於爲什麼出現這種情況的解釋):

var document = wordApplication.Documents.Open(file); 

你會遇到這些文件作爲循環繼續。這可以通過使用Directory.GetFiles()而不是Directory.EnumerateFiles()來避免,因爲前者只是返回一個文件路徑數組,它不會在您循環時返回;即它只是在開始的內建的文件的靜態列表,其忽略了創建的文件,而循環正在發生。

+0

不錯的嘗試會非常簡單,但是不知怎麼,仍然有錯誤拋出文件看起來已經損壞。 – TamoDaleko

+0

如果甚至不嘗試打開它,爲什麼會拋出錯誤?這就是'if'塊的全部要點。 –

+0

好的答案,但AFAIK不會將'file'字符串作爲完整路徑嗎? 「.Contains(」〜$「)'不適合嗎? –