Программирование на языке MFC

Мой второй блог в серии программирования

Метод OsErrorToException


Кстати, для того чтобы перекодировать значение, возвращаемое функцией GetLastError(), в код причины, вызвавшей прерывание, можно использовать метод OsErrorToException(), исходный код которого находится в файле filex.cpp:

int PASCAL CFileException::OsErrorToException(LONG lOsErr)

{

// NT Error codes switch ((UINT)lOsErr)

{

case NO_ERROR:

return CFileException::none; case ERROR_FILE_NOT_FOUND:

return CFileException::fileNotFound; case ERROR_PATH_NOT_FOUND:

return CFileException::badPath; case ERROR_TOO_MANY_OPEN_FILES:

return CFileException::tooManyOpenFiles; case ERROR_ACCESS_DENIED:

return CFileException:: accessDenied; case ERROR_INVALID_HANDLE:

return CFileException::fileNotFound; case ERROR_BAD_FORMAT:

return CFileException::invalidFile; case ERROR_INVALID_ACCESS:

return CFileException::accessDenied; case ERROR_INVALID_DRIVE:

return CFileException::badPath; case ERROR_CURRENT_DIRECTORY:

return CFileException::removeCurrentDir; case ERROR_NOT_SAME_DEVICE:

return CFileException::badPath; case ERROR_NO_MORE_FILES:

return CFileException::fileNotFound; case ERROR_WRITE_PROTECT:

return CFileException::accessDenied; case ERROR_BAD_UNIT:

return CFileException::hardIO; case ERROR_NOT_READY:

return CFileException::hardIO;

case ERROR_BAD_COMMAND:

return CFileException::hardIO; case ERROR_CRC:

return CFileException::hardIO; case ERROR_BAD_LENGTH:

return CFileException:ibadSeek; case ERROR_SEEK:

return CFileException:ibadSeek; case ERROR_NOT_DOS_DISK:

return CFileException::invalidFile; case ERROR_SECTOR_NOT_FOUND:

return CFileException::badSeek; case ERROR_WRITE_FAULT:

return CFileException::accessDenied; case ERROR_READ_FAULT:

return CFileException::badSeek; case ERROR_SHARING_VIOLATION:

return CFileException::sharingViolation; case ERROR_LOCK_VIOLATION:

return CFileException::lockViolation; case ERROR_WRONG_DISK:

return CFileException:rbadPath; case ERROR_SHARING_BUFFER_EXCEEDED:

return CFileException::tooManyOpenFiles; case ERROR_HANDLE_EOF:

return CFileException::endOfFile; case ERROR_HANDLE_DISK_FULL:

return CFileException::diskFull; case ERROR_DUP_NAME:

return CFileException::badPath; case ERROR_BAD_NETPATH:

return CFileException::badPath; case ERROR_NETWORK_BUSY:

return CFileException::accessDenied; case ERROR_DEV_NOT_EXIST:

return CFileException::badPath; case ERROR_ADAP_HDW_ERR:

return CFileException::hardIO; case ERROR_BAD_NET_RESP:

return CFileException::accessDenied; case ERROR_UNEXP_NET_ERR:

return CFileException::hardIO; case ERROR BAD REM ADAP:

return CFileException::invalidFile; case ERROR_NO_SPOOL_SPACE:

return CFileException::directoryFull; case ERROR_NETNAME_DELETED:

return CFileException: -.accessDenied; case ERROR_NETWORK_ACCESS_DENIED:

return CFileException::accessDenied; case ERROR_BAD_DEV_TYPE:

return CFileException: : invalidFile;*1 case ERROR_BAD_NET_NAME:

return CFileException::badPath; case ERROR_TOO_MANY_NAMES:

return CFileException::tooManyOpenFiles; case ERROR_SHARING_PAUSED:

return CFileException::badPath; case ERROR_REQ_NOT_ACCEP:

return CFileException::accessDenied; case ERROR_FILE_EXISTS:

return CFileException::accessDenied; case ERROR_CANNOT_MAKE:

return CFileException::accessDenied; case ERROR_ALREADY_ASSIGNED:

return CFileException::badPath; case ERROR_INVALID_PASSWORD:

return CFileException::accessDenied; case ERROR_NET_WRITE_FAULT:

return CFileException::hardIO; case ERROR_DISK_CHANGE:

return CFileException::fileNotFound; case ERROR_DRIVE_LOCKED:

return CFileException::lockViolation; case ERROR_BUFFER_OVERFLOW:

return CFileException::badPath; case ERROR_DISK_FULL:

return CFileException:rdiskFull; case ERROR_NO_MORE_SEARCH_HANDLES:

return CFileException::tooManyOpenFiles; case ERROR_INVALID_TARGET_HANDLE:

return CFileException::invalidFile; case ERROR_INVALID_CATEGORY:

return CFileException::hardIO; case ERROR_INVALID_NAME:

return CFileException::badPath;

case ERROR_INVALID_LEVEL:

return CFileException:rbadPath; case ERROR_NO_VOLUME_LABEL:

return CFileException::badPath; case ERROR_NEGATIVE_SEEK:

return CFileException::badSeek; case ERROR_SEEK_ON_DEVICE:

return CFileException::badSeek; case ERROR_DIR_NOT_ROOT:

return CFileException::badPath; case ERROR_DIR_NOT_EMPTY:

return CFileException::removeCurrentDir; case ERROR_LABEL_TOO_LONG:

return CFileException::badPath; case ERROR_BAD_PATHNAME:

return CFileException::badPath; case ERROR_LOCK_FAILED:

return CFileException::lockViolation; case ERROR_BUSY:

return CFileException::accessDenied; case ERROR_INVALID_ORDINAL:

return CFileException::invalidFile; case ERROR_ALREADY_EXISTS:

return CFileException::accessDenied; case ERROR_INVALID_EXE_SIGNATURE:

return CFileException::invalidFile; case ERROR_BAD_EXE_FORMAT:

return CFileException::invalidFile; case ERROR_FILENAME_EXCED_RANGE:

return CFileException::badPath; case ERROR_META_EXPANSION_TOO_LONG:

return CFileException::badPath; case ERROR_DIRECTORY:

return CFileException::badPath; case ERROR_OPERATION_ABORTED:

return CFileException::hardIO; case ERROR_IO_INCOMPLETE:

return CFileException::hardIO; case ERROR_IO_PENDING:

return CFileException::hardIO; case ERROR_SWAPERROR:

return CFileException::accessDenied; default:

return CFileException::generic;

}

}

Похожие статьи: