首页 > 学院 > 开发设计 > 正文

CFile文件操作示例

2019-11-14 08:52:19
字体:
来源:转载
供稿:网友

简单介绍

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表