2011-03-21 54 views
2

我有這樣的代碼:例外在C++的問題

try 
{ 
    files = Directory::GetFiles(path); 
}catch(int){ 
    MessageBox::Show("Error getting files."); 
    return 0; 
} 

但是當我運行它和GetFiles崩潰,它仍然報告未處理的異常。爲什麼?

+1

在catch(...),使用正確的相應的異常類型,而不是int。 – moala 2011-03-21 16:31:47

+2

你究竟扔什麼 - 一個int?一個int指針?一些不是int的東西? – Rup 2011-03-21 16:31:59

回答

7

因爲您只能捕獲int類型的例外情況。

使用catch(...)來捕捉任何類型的異常。

+0

我認爲所有的異常都可以轉換爲int。謝謝。 – 2011-03-21 16:40:21

0

我相信「未處理的異常」在Windows中也用於表示內存保護錯誤,並不總是與C++異常相同的東西,這正是您想要捕捉的地方。

可能你傳入的路徑中有一些垃圾數據。如果路徑沒問題,那麼你需要確保你能捕獲到函數可能拋出的所有類型的異常,而不僅僅是int

2

MSDNGetFiles可以拋出以下例外:

IOException  
UnauthorizedAccessException  
ArgumentException 
ArgumentNullException 
PathTooLongException  
DirectoryNotFoundException 

你不抓任何人。唯一例外的是int,不能被GetFiles拋出。要解決此問題,要麼增加對上述各例外的catch語句,並適當地處理它們,或使用省略號來捕獲所有異常:

try { 
    files = Directory::GetFiles(path); 
} catch(...) { 
    MessageBox::Show("Error getting files."); 
    return 0; 
}