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 | 设置指定文件的状态(静态,虚函数) |
新闻热点
疑难解答