Некоторые функции Windows, такие как CreateFile
, могут возвращать огромное множество кодов ошибок при вызове GetLastError
, и непрактично проверять все возможные коды ошибок - документации часто не хватает, и часто добавляются новые коды ошибок.
Некоторые из них (например, нарушения прав доступа или недопустимые параметры) вызваны ошибкой программиста и не должны допускать продолжения выполнения программы. Однако другие возникают из-за других факторов, таких как неправильные права доступа к файлам, нарушения совместного доступа, неправильные имена файлов и т. Д., Которые разработчик практически не контролирует.
Я хотел бы обрабатывать все «некритические» ошибки (например, неправильные имена файлов), позволяя «критическим ошибкам» (например, нарушениям доступа) приводить к сбою моей программы.
В идеале я бы сказал:
// ... an error occurred. Is it a programmer error?
if (IsErrorCritical(GetLastError()))
{
// Yes; raise an exception, crashing the program.
RaiseException(GetLastError(), 0, 0, NULL);
}
Как мне решить, какие коды ошибок можно безопасно подавить (например, при перечислении файлов на диске), если я не могу предсказать каждый результат?