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设置指定文件的状态(静态,虚函数)