简单介绍
CFile是MFC文件类的基类,它直接提供非缓冲的二进制磁盘输入/输出设备,并直接地通过派生类支持文本文件和内存文件。CFile与CArchive类共同使用,支持MFC对象的串行化。
该类有三种常见的构造函数,其中一种声明形式如下:
CFile(LPCTSTR lpszFileName,UINT nOpenFlags);
参数:
lpszFileName是指定的文件名称,可以是相对路径和决定路径;
nOpenFlags是指定文件的操作标志,常见有以下几种,:
- CFile::modeCreate 文件已经存在,将它的长度截断为0;
- CFile::modeRead 只读
- CFile::modeReadWrite 可读写
- CFile::modeWrite 只写
操作示例
我们创建一个单文档MFC工程,命名为File;并在主菜单中增加File的菜单项,WriteFile和ReadFile是其子菜单,其ID分别是IDM_WRITEFILE和IDM_READFILE,这两个子菜单时非Popup类型,如下图所示:
我们在View类中增加这两个的菜单响应函数,其函数分别命名为OnWriteFile和OnReadFile;
OnWriteFile消息响应函数:
void CFileView::OnWriteFile()
{
// TODO: 在此添加命令处理程序代码
CFile File("test.txt",CFile::modeCreate|CFile::modeReadWrite);
char szBufData[100] = {"hello word!"};
//写入文件内容,不包含/0
File.Write(szBufData, strlen(szBufData));
//立即写入,不缓冲
File.Flush();
//文件操作结束关闭
File.Close();
}
OnReadFile消息响应函数:
void CFileView::OnReadFile()
{
// TODO: 在此添加命令处理程序代码
CFile File;
CFileException e;
TCHAR* pszFileName = _T("test.txt");
//构造文件,同时增加异常处理
if(!File.Open(pszFileName, CFile::modeRead,&e))
{
CString strErr;
strErr.Format(_T("File could not be opened %d\n"), e.m_cause);
MessageBox(strErr);
}
//创建指定大小的Buffer
DWORD dwFileLenth = (DWORD)File.GetLength();
//初始化buffer, 增加一个/0空间
char *pBuf = new char[dwFileLenth + 1];
memset(pBuf, 0, dwFileLenth + 1);
if (pBuf != NULL)
{
//读取文件内容
File.Read(pBuf,dwFileLenth);
File.Close();
//显示文件内容
MessageBox(pBuf);
//删除bufer,避免内存泄漏
delete[] pBuf;
pBuf = NULL;
}
}
OnWriteFile运行结果:
工程目录下出现test.txt文件,其内容是“hello word!”;
OnReadFile运行结果:
弹出Messagebox对话框,其内容是“hello word!”;
成员函数
数据成员
m_hFile | 常包含操作系统文件句柄 |
构造函数
CFile | 从一个路径或文件句柄构造一个CFile对象 |
Abort | 不管任何警告和错误,关闭一个文件 |
Duplicate | 构造一个基于该文件的副本 |
Open | 带错误检验选项,安全打开一个文件 |
Close | 关闭文件,删除对象 |
输入/输出
Read | 从文件的当前位置读数据 |
ReadHuge | 可从文件的当前位置读取大于64K数据,在32位编程中废弃了,见Read |
Write | 将文件数据写入当前文件位置 |
WriteHuge | 可将文件的大于64K数据写到当前文件位置,在32位编程中废弃了,见Write |
Flush | 溢去未被写入的任何数据 |
定位
Seek | 定位于当前文件指针 |
SeekToBegin | 定位当前文件指针到文件开头 |
SeekToEnd | 定位当前文件指针到文件尾 |
GetLength | 获取文件长度 |
SetLength | 改变文件长度 |
封锁
LockRange | 在文件中封锁一定范围内的字节 |
UnlockRange | 解锁一定范围内的字节 |
状态
GetPosition | 获取当前文件指针 |
GetStatus | 获取打开文件的状态 |
GetFileName | 获取被选文件的文件名 |
GetFileTitle | 获取被选文件的标题 |
GetFilePath | 获取被选文件的完整路径 |
SetFilePath | 设置被选文件的完整路径 |
静态
Rename | 改名指定文件(静态函数) |
Remove | 删除指定文件(静态函数) |
GetStatus | 获取指定文件的状态(静态,虚函数) |
SetStatus | 设置指定文件的状态(静态,虚函数) |