Исключения в проблеме C ++ - PullRequest
2 голосов
/ 21 марта 2011

У меня есть этот код:

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

Но когда я запускаю его и GetFiles вылетает, он все равно выдает необработанное исключение. Почему?

Ответы [ 3 ]

7 голосов
/ 21 марта 2011

Потому что вы ловите только исключения типа int.

Используйте catch(...), чтобы перехватить любые исключения.

2 голосов
/ 21 марта 2011

Согласно MSDN , GetFiles может выдавать следующие исключения:

IOException     
UnauthorizedAccessException     
ArgumentException   
ArgumentNullException   
PathTooLongException    
DirectoryNotFoundException

Вы не поймаете ни одного из них.Единственное исключение, которое вы ловите, имеет тип int, который не может быть выдан GetFiles.Чтобы решить эту проблему, либо добавьте операторы catch для каждого из приведенных выше исключений и обработайте их соответствующим образом, либо используйте многоточие для перехвата всех исключений:

try {
  files = Directory::GetFiles(path);
} catch(...)  {
  MessageBox::Show("Error getting files.");
  return 0; 
}
0 голосов
/ 21 марта 2011

Я полагаю, что «необработанное исключение» также используется в Windows для обозначения ошибки защиты памяти, и это не всегда то же самое, что и исключение C ++, которое вы пытаетесь поймать здесь.

Возможно, путь, по которому вы проходите, содержит какие-то данные для мусора. Если путь в порядке, вам нужно убедиться, что вы перехватываете все типы исключений, которые могут быть выданы вашей функцией, а не только int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...