我有这样的代码:例外在C++的问题
try
{
files = Directory::GetFiles(path);
}catch(int){
MessageBox::Show("Error getting files.");
return 0;
}
但是当我运行它和GetFiles
崩溃,它仍然报告未处理的异常。为什么?
我有这样的代码:例外在C++的问题
try
{
files = Directory::GetFiles(path);
}catch(int){
MessageBox::Show("Error getting files.");
return 0;
}
但是当我运行它和GetFiles
崩溃,它仍然报告未处理的异常。为什么?
因为您只能捕获int
类型的例外情况。
使用catch(...)
来捕捉任何类型的异常。
我认为所有的异常都可以转换为int。谢谢。 – 2011-03-21 16:40:21
我相信“未处理的异常”在Windows中也用于表示内存保护错误,并不总是与C++异常相同的东西,这正是您想要捕捉的地方。
可能你传入的路径中有一些垃圾数据。如果路径没问题,那么你需要确保你能捕获到函数可能抛出的所有类型的异常,而不仅仅是int
。
据MSDN,GetFiles
可以抛出以下例外:
IOException
UnauthorizedAccessException
ArgumentException
ArgumentNullException
PathTooLongException
DirectoryNotFoundException
你不抓任何人。唯一例外的是int
,不能被GetFiles
抛出。要解决此问题,要么增加对上述各例外的catch语句,并适当地处理它们,或使用省略号来捕获所有异常:
try {
files = Directory::GetFiles(path);
} catch(...) {
MessageBox::Show("Error getting files.");
return 0;
}
在catch(...),使用正确的相应的异常类型,而不是int。 – moala 2011-03-21 16:31:47
你究竟扔什么 - 一个int?一个int指针?一些不是int的东西? – Rup 2011-03-21 16:31:59