MFC提供了CFile类方便文件的读写,首先要知道,文件的数据读取、数据写入与文件指针的操作都是以字节为单位的,数据的读取和写入都是从文件指针的位置开始的,当打开一个文件的时候,文件指针总是在文件的开头。常规方法如下:
CFile file;
file.open( LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL );
//pszFileName是文件名,可包含文件路径,若只有文件名,则默认路径为工程路径,nOpenFlags是文件打开模式,pError是打开失败时用来接收失败信息,一般设置为NULL。
nOpenFlags的常用模式有:
表1-1 | |
标志 | 含义 |
CFile::modeCreate | 创建新文件,如果文件已存在,则将其长度变成0 |
CFile::modeNoTruncate | 与modeCreate组合使用,如果文件已存在,则不会将其长度变成0 |
CFile::modeRead | 以只读方式打开文件 |
CFile::modeReadWrite | 以读写方式打开文件 |
CFile::modeWrite | 以只写方式打开文件 |
CFile::modeNoInherit | 组织该文件被子项继承 |
CFile::shareDenyNone | 以共享模式打开文件,不会禁止其他进程对文件的读写 |
CFile::shareDenyRead | 禁止其他进程对文件的读操作 |
CFile::shareDenyWrite | 禁止其他进程对文件的写操作 |
CFile::shareExclusive | 以独占模式打开文件,禁止其他进程对文件的读写 |
CFile::typeText | 以文本方式打开文件 |
CFile::typeBinary | 以二进制方式打开文件 |
CFile::modeCreate
CFile::modeNoTruncate
CFile::modeRead
CFile::modeWrite
CFile::modeReadWrite
CFile::typeBinary
CFile::typeText
CFile默认使用二进制模式读写文件,CFile无法使用文本模式读写文件。
CFile提供了一些常用的操作函数,如表1-2所示。
表1-2 | |
函数 | 含义 |
Open | 打开文件 |
Close | 关闭文件 |
Flush | 刷新待写的数据 |
Read | 从当前位置读取数据 |
Write | 向当前位置写入数据 |
GetLength | 获取文件的大小 |
Seek | 定位文件指针至指定位置 |
SeekToBegin | 定位文件指针至文件头 |
SeekToEnd | 定位文件指针至文件尾 |
GetFileName | 获取文件名,如:“NOTEPAD.EXE” |
GetFilePath | 获取文件路径,如:“C:\WINDOWS \NOTEPAD.EXE” |
GetFileTitle | 获取文件标题,如:“NOTEPAD” |
GetPosition | 获取当前文件指针 |
GetStatus | 获取当前文件的状态,返回一个CFileStatus |
#Remove | 静态方法,删除指定文件 |
#Rename | 静态方法,重命名指定文件 |
注意最后两个静态函数,其实它们封装了Windows API中关于文件管理的函数。
使用CFile操作文件的流程如下:
构造一个CFile对象。
调用CFile::Open()函数创建、打开指定的文件。
调用CFile::Read()和CFile::Write ()进行文件操作。
调用CFile::Close()关闭文件句柄。
文件指针的位置设置可以使用:
Seek( LONG lOff, UINT nFrom )
lOff :是指针偏移字节数,若向后偏移则为正数,若向前偏移,则为负数。
nFrom :MSDN上有三种取值:
CFile::begin 从文件开头开始算起,lOff为正数;
CFile::current
CFile::end
SeekToBegin( )
SeekToEnd( )
GetPosition( )
获取文件的字节数可用 GetLength( )
DOWRD len=file.GetLength();
char *pBuf=new char[len+1]
char占一个字节,int占四个字节。
写入文件:
CFile file;
file.Open("E:\\VC\\1.txt",CFile::modeCreate|CFile::modeWrite|CFile::modeNoTruncate,NULL);
file.Write("HelloWorld",strlen("HelloWorld"));
file.close( );
读取文件:
CFile file;
file.Open("E:\\VC\\1.txt",CFile::modeRead,NULL);
DWORD len=file.GetLength( );
char Buf[len+1];
Buf[len]=0;
file.Read(Buf,len);
MessageBox(Buf);