盘硬件,因此会产生各种各样的异常。无论是文件的
打开、读写、定位还是关闭cāo作都会产生异常。异常通常是由调用的函数抛出,在TRY/CATCH
块中捕获,此外CFile::Open()函数还可以用参数的形式获得异常的指针。
MFC 中文件的异常类是CFileException。CFileException 对象可以获得文件cāo作失败的原
因代码。该对象在CFile 成员函数中被创建和产生,也可以在CFile 派生类的成员函数中创建
和产生。程序用CATCH 表达式获取这一对象。CFileException 类包含可移植的原因代码和cāo
作系统制定的错误值的公共成员变量。一般情况下使用可移植的原因代码以实现平台的无关
xìng。
下面对CFileException 相关cāo作进行介绍,包括如何创建、抛出和获得异常。
1.创建并抛出异常
MFC 不允许手动创建CFileException 对象,而采用AfxThrowFileException()函数创建并
抛出文件异常。AfxThrowFileException()函数的原型为:
void AfxThrowFileException(
int cause,
LONG lOsError = -1,
LPCTSTR lpszFileNcom = NULL
);
? 参数cause:指定异常的原因,是一个枚举类型,具体枚举值如表8-2 所示。
? 参数lOsError:指定一个跟cāo作系统相关的异常原因。注意该值需要程序自行提供,
cāo作系统并不自动设置该值。
? 参数lpszFileNcom:指定出错的文件名。
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·196·
表8-2 文件异常原因代码
cause 取值 取值说明
CFileException::none 没有错误发生
CFileException::generic 一个没有特定意义的错误发生
CFileException::fileNotFound 无法找到文件
CFileExceptionLLbadPath 路径错误
CFileException::tooManyOpenFiles 超出允许的打开文件的最大数目
CFileException::accessDenied 文件无法访问
CFileException::invalidFile 尝试使用一个无效的文件句柄
CFileException::removeCurrentDir 当前工作目录无法被删除
CFileException::directoryFull 没有更多的目录项
CFileException::badSeek 移动文件指针错误
CFileException::hardIO 硬件错误
CFileException::sharingViolation 共享错误
CFileException::l