我有这段代码:
try
{
files = Directory::GetFiles(path);
}catch(int){
MessageBox::Show("Error getting files.");
return 0;
}
但是当我运行它并且GetFiles
崩溃时,它仍会报告未处理的异常。为什么呢?
答案 0 :(得分:7)
因为您只捕获int
类型的例外。
使用catch(...)
来捕获任何异常。
答案 1 :(得分:2)
根据MSDN,GetFiles
可以抛出以下例外情况:
IOException
UnauthorizedAccessException
ArgumentException
ArgumentNullException
PathTooLongException
DirectoryNotFoundException
你没有抓到任何一个。您捕获的唯一例外是int
类型GetFiles
无法抛出。要解决此问题,请为上述每个异常添加catch语句并适当地处理它们,或使用省略号来捕获所有异常:
try {
files = Directory::GetFiles(path);
} catch(...) {
MessageBox::Show("Error getting files.");
return 0;
}
答案 2 :(得分:0)
我认为“未处理的异常”在Windows中也用于表示内存保护错误,并不总是与C ++异常相同,这就是您要在此处捕获的内容。
您传入的路径可能包含一些垃圾数据。如果路径正常,那么您需要确保捕获函数可能引发的所有类型的异常,而不仅仅是int
。