2014-01-14 91 views
2

昨天我問了一個問題,並得到了很大的幫助(特別是來自@AviTurner)。忽略異常並將文件添加到列表中?

我已經進一步開發了我昨天正在研究的程序,並且遇到了一個新問題。

我的程序代碼可以找到here

Basicly它做什麼,就是:

用戶可以選擇一個目錄的路徑,程序掃描只讀屬性的所有文件。

它設置那些當前沒有它的文件的只讀屬性。

現在遇到問題時,遇到當前正在使用的文件(如系統文件)。

有人告訴我有沒有辦法解決這個,但我認爲:

有沒有忽略錯誤(我的意思是繼續運行程序,只需跳過此文件)的方式;並將該文件的名稱添加到列表中供以後跟蹤使用?

我希望我明確了我的問題。

謝謝。

+2

提示:使用try catch – wudzik

+0

@wudzik我應該做一個catch(Exception)',然後在出現錯誤的那段代碼中放上括號? 我從來沒有使用過catch函數。 – JFBN

回答

3

嘗試圍繞你的代碼中的try/catch:

try 
{ 
    System.IO.FileAttributes attr = System.IO.File.GetAttributes(file); 
} 
catch(Exception ex) 
{ 
    files.add(file) 
} 

基本上如果你在try塊異常,程序執行catch塊

+0

我試過這樣做;但它給了我另一個問題。 現在我得到了錯誤「名字'attr'不存在於currenct上下文中,我認爲這是因爲'attr'是在父範圍內聲明的(正確??) 我該如何幫助? – JFBN

+0

哦,對了... ...只是將所有使用attr的代碼粘貼到try塊中 – Tal87

+0

噢,我明白了,現在它可以工作了,非常感謝,我明白了try/catch現在是如何工作的 我的catch看起來像這個現在: '趕上(例外特異) { Console.SetCursorPosition(2,2); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(「發生錯誤改變的屬性一份文件」); 錯誤文件。添加文件); }' 這會正確地將文件添加到列表「errorfiles」嗎? – JFBN

1

,我建議......

try 
{ 
    System.IO.File.SetAttributes(file, attr); 
} 
catch // You can specify a specific error with catch(UnauthorizedAccessException ex) for instance. 
{ 
    filesInError.Add(file); // A list<string>() to keep track of errors. 
} 

這裏是由SetAttributes()引發的細節和異常。 SetAttributes on MSDN

還有一些關於try catch的解釋,如果你不熟悉的話。 try ... catch on MSDN