2011-03-21 64 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; 
}