ockViolation 锁定错误
CFileException::diskFull 磁盘已满
CFileException::endOfFile 到达文件末尾
用户可以在自定义函数中添加自定义语句AfxThrowFileException 以抛出自定义的文件
异常,例如有一个CSampleFile 类用于指定存取一个有最大长度的文件,这个最大长度设置
为m_dwMaxLength,如果超出这个长度,就存取失败。下面给出一个写文件的例子,如果写
入的数据使得文件长度超出m_dwMaxLength,则模拟磁盘满的出错异常。
//向文件中写入字符串lpszString
void CSampleFile::WriteString(LPCTSTR lpszString)
{
//m_File 是CSampleFile 的成员变量
DWORD dwLen=m_File.GetLength()+strlen(lpszString)+1;//获得写入后的文件大小
if (dwLen>m_dwMaxLength)
AfxThrowFileException(CFileException::diskFull); //抛出磁盘满的异常
m_File.Write(lpszString,strlen(lpszString)+1); //如果没超过限度,则写入文件
}
2.获得文件异常信息
从第1 部分创建CFileException 异常中可以看出,文件异常有3 类不同的信息,分别由
3 个成员变量表示。
? CFileException::m_cause : int 类型, 获得可移植的出错代码, 这些代码同前面
AfxThrowFileException()函数的参数cause 的代码相同。
? CFileException::m_lOsError:long 类型,获得cāo作系统指定的出错代码。
? CFileException::m_strFileNcom:CString 类型,获得出错的文件名。
下面给出用TRY/CATCH 块获得文件异常信息的示例代码:
TRY
{
//创建文件进行写入
枫叶文学网www.fywxw.com
第8 章 文件cāo作
·197·
CFile f( pFileNcom, CFile::modeCreate | CFile::modeWrite );
}
CATCH( CFileException, e )
{
//文件未找到
if( e->m_cause == CFileException::fileNotFound )
TRACE( "ERROR: File not found\n")
}
END_CATCH
8.2.6 管理cāo作
对文件的cāo作,除了打开文件并进行读写外,还可以进行删除、重命名等cāo作。CFile
类也为这些cāo作提供了支持。