编程词典
明日图书
明日软件
用户注册
用户登录
站内
  当前位置:编程词典服务网 >> 编程词典社区论坛 >> 使用CFile类进行文件操作...
  · 使用CFile类进行文件操作

用户:  大麦
发帖:  430 篇
作品:  0 个
回复:  110 篇
技术分:  1160 分
等级:  
注册:  2010-05-11 09:09:40



发表于:2010-07-13 13:55:11
          楼主

使用CFile类进行文件操作
为了方便对文件进行操作,MFC类库提供了一个CFile类,该类封装了对文件的各种操作。使用CFile类,用户可以非常容易地对文件进行操作。CFile类的主要方法如下:
(1)Open方法
该方法用于打开一个文件。
语法:
virtual BOOL Open( LPCTSTR lpszFileName, UINT nOpenFlags, CFIleException* pError = NULL );
参数说明:
 lpszFileName:表示要打开的文件名。可以包含完整路径,也可以是相对的文件名。
 nOpenFlags:表示文件打开标记,其可选值如表1所示。
表1                             CFile打开标记

描述

CFile::modeCreate

创建一个新文件,如果文件已经存在,则删除文件中的数据

CFile::modeNoTruncate

该标记与CFile::modeCreate组合使用,如果文件已存在,不删除文件现有数据

CFile::modeRead

以只读的形式打开文件

CFile::modeReadWrite

以读写的方式打开文件

CFile::modeWrite

以只写的形式打开文件

CFile::modeNoInherit

阻止文件句柄被子进程继承

CFile::shareDenyNone

以不阻止其他进程读写文件的形式打开文件

CFile::shareDenyRead

以阻止其他进程读取文件的形式打开文件

CFile::shareDenyWrite

以阻止其他进程写入文件的形式打开文件

CFile::shareExclusive

以独占的形式打开文件,阻止其他进程对文件进行操作

CFile::shareCompat

32MFC中无效。此标志在使用CFile::Open时映射为CFile::ShareExclusive

CFile::typeText

设置文本模式,对回车换行符进行特殊处理

CFile::typeBinary

设置二进制模式

 

 


  注意: CFile::modeRead和CFile::modeWrite分别以只读和只写权限访问文件。这两个标记不能同时存在,如果写成CFile::modeRead|CFile::modeWrite的形式,表示以只写形式访问文件,也就是说这种形式与CFile::modeWrite的作用是相同的。
 pError:一个异常的指针,一般情况下可以使用NULL指针,这个指针在打开文件过程中如果产生错误,Open将抛出一个CFileException异常,而不是返回FALSE。
(2)Close
该方法用于关闭打开的文件。
语法:
virtual void Close( );
(3)Read
该方法用于从文件中读取数据到缓冲区中。
语法:
virtual UINT Read( void* lpBuf, UINT nCount );
参数说明:
 lpBuf:表示接收数据的缓冲区。
 nCount:表示从文件中读取数据的最大数量。
 返回值:函数返回实际读取的字节数。
(4)ReadHuge
该方法从文件中读取数据到缓冲区,主要用于大文件的读取。
语法:
DWORD ReadHuge( void* lpBuffer, DWORD dwCount );
参数说明:
 lpBuffer:表示接收数据的缓冲区。
 nCount:表示从文件中读取数据的最大数量。
 返回值:函数返回实际读取的字节数。
(5)Write
该方法用于从缓冲区中写入数据到文件中。
语法:
virtual void Write( const void* lpBuf, UINT nCount );
参数说明:
 lpBuf:表示待写入数据的缓冲区。
 nCount:表示向文件中写入数据的数量。
(6)WriteHuge
该方法用于从缓冲区中写入数据到文件中,主要用于较大数据量数据的写入。
语法:
void WriteHuge( const void* lpBuf, DWORD dwCount );
参数说明:
 lpBuf:表示待写入数据的缓冲区。
 nCount:表示向文件中写入数据的数量。
(7)Flush
该方法将文件缓冲区中的数据强制写入文件中。
语法:
virtual void Flush( );
(8)Seek
该方法用于重新设置文件指针的位置。
语法:
virtual void LockRange( DWORD dwPos, DWORD dwCount );
参数说明:
 lOff:表示文件指针移动的字节数。
 nFrom:指针移动的起点。为CFile::begin,表示从文件开始,把指针向后移动lOff字节。为CFile::current,表示从当前位置开始,把指针向后移动lOff字节。为CFile::end,表示从文件尾开始,把指针向前移动lOff字节。
(9)LockRange
该方法用于锁定文件中指定区域中的数据,这样可以阻止其他进程对该区域数据的访问。
语法:
virtual void LockRange( DWORD dwPos, DWORD dwCount );
参数说明:
 dwPos:表示从开始字节到被封锁的字节的偏移量
 dwCount:表示封锁的字节数
(10)UnlockRange
该方法用于解锁文件中指定区域中的数据,以允许其他进程对该区域数据的访问。
语法:
virtual void UnlockRange(ULONGLONG dwPos,ULONGLONG dwCount );
参数说明:
 dwPos:表示从开始字节到被解锁的字节的偏移量
 dwCount:表示解锁的字节数
(11)Rename
该方法用于对文件进行重命名。
语法:

static void PASCAL Rename( LPCTSTR lpszOldName, LPCTSTR lpszNewName );
参数说明:
 lpszOldName:表示原文件名。
 lpszNewName:表示新文件名。
(12)GetStatus
该方法用于获取文件的状态。
语法:
BOOL GetStatus( CFileStatus& rStatus ) const;
参数说明:
rStatus:文件状态对象,其类型是CFileStatus,CFileStatus是一个存储状态信息的数据结构,CFileStatus的结构成员如表2所示。
表2                              文件状态

类型

成员

描述

CTime

m_ctime

文件的创建时间

CTime

m_mtime

文件的修改时间

CTime

m_atime

文件的最后访问时间

LONG

m_size

文件的逻辑大小

BYTE

m_attribute

文件的系统属性

char

m_szFullName[_MAX_PATH]

文件的绝对路径

(13)SetStatus
该方法用于设置文件的状态。
语法:
static void SetStatus( LPCTSTR lpszFileName, const CFileStatus& status );
参数说明:
 lpszFileName:表示文件的名称,可以是绝对的也可以是相对的,但不能是网络路径。
 status:是CFileStatus结构指针,表示设置的文件状态。
(14)GetLength
该方法用于获取文件的长度。
语法:
virtual ULONGLONG GetLength( ) const;
下面通过一个示例来介绍如何使用CFile类进行文件操作。
例如,使用CFile类进行文件操作
(1)创建一个基于对话框的工程,工程名称为“OperateFile”。
(2)处理“写入”按钮的单击事件,向文件中写入数据。
void COperateFileDlg::OnWrite()
{
 CFile file;            //定义一个文件对象
 file.Open("demo.txt",CFile::modeCreate|CFile::modeReadWrite); //创建文件
 file.Write("复兴之路,大国崛起",18);       //向文件中写入数据
 file.Close();           //关闭文件
}
(3)处理“读取”按钮的单击事件,读取文件的内容和属性信息。
void COperateFileDlg::OnRead()
{
 CFile file;            //定义文件对象
 file.Open("demo.txt",CFile::modeRead);      //以读的方式打开文件
 unsigned char pchData[MAX_PATH] = {0};     //定义数据缓冲区
 file.Read(pchData,MAX_PATH);       //读取数据到缓冲区
 CFileStatus flStatus;          //定义文件状态
 file.GetStatus(flStatus);         //获取文件状态
 file.Close();           //关闭文件
 //获取文件创建时间
 CString createtime = flStatus.m_ctime.Format("%Y-%m-%d %H:%M:%S");
 CString hint = "文件内容:";        //定义一个字符串
 hint += (char*)pchData;         //添加字符串
 hint +="n";           //添加换行符
 hint +="创建时间: ";          //添加数据
 hint +=createtime;          //添加数据
 MessageBox(hint,"提示");         //弹出提示对话框
}
(4)运行程序,效果如图1所示。
 
图1  CFile类操作文件

 

本帖赏分:0 分   回复数:0 篇     
修改   删除   引用   回复
该帖暂无回复!
吉林省明日科技有限公司提供技术支持. 
Copyright © 1999-2008 吉林省明日科技有限公司. 吉ICP备10002740
当前时区 GMT+8, 今天是 
刷新页面 - 关于我们 - 设为首页