1. CFile类简介:
1) CFile封装了操作系统对文件读写的相关操作API,是MFC中一种较为低级的I/O操作手段,MFC常用CArchive类对数据进行串行化写入读出磁盘;
2) CFile的几个基本的数据成员:
i. UINT m_hFile:即和CFile相关联的文件的句柄,实为文件描述符,是一个UINT型的值;
ii. CString m_strFileName:即文件的名称,包含的是文件的完整的绝对路径名称;
3) 和文件名有关的几个CFile的成员函数:
i. 获取完整的绝对路径名:virtual CString CFile::GetFilePath() const;
ii. 只获取文件名(不包括路径,但是包括后缀,比如note.txt):virtual CString CFile::GetFileName() const;
iii. 只获取文件的标题(即不包括后缀,比如note.txt只返回note):virtual CString CFile:GetFileTitle() const;
2. 打开文件:
i. 共有两种方法,一种是使用CFile的构造函数直接打开文件,另一种是使用CFile::Open函数打开,这两种函数都考虑到了文件打开失败的情形,因此需要进行相关的异常处理;
ii. 构造函数打开:
a. 函数原型:CFile::CFile(LPCTSTR lpszFileName, UINT nOpenFlags) throw(CFileException);
!!第一个参数是文件名,第二个参数是打开方式(只读、读写等),该函数还会抛出异常,可以通过该异常对象来查看是何种类型的异常
b. 使用范例:
try
{
CFile file(_T("File.txt"), CFile::modeReadWrite);
...
}
catch (CFileException* e)
{
e->ReportError();
e->Delete();
};
!!这种方式必须要处理异常,如果不接受处理异常则异常将会抛向上一层函数,直至最终的操作系统,一般来说都是要在当前层的当前位置处理异常;
iii. CFile::Open打开文件:
a. 函数原型:virtual BOOL CFile::Open(LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL);
b. 如果打开成功返回TRUE,否则返回FALSE,因此可以通过一个if语句判断文件是否打开成功,如果打开不成功则可以跳过或进行相应的处理,可以看到第三个参数就是用来接收抛出的异常,这项是可选的,如果你想查看异常类