MFC文件操作
cfile:: open
virtual BOOL Open( LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL );
返回值:成功为非0,否则为0,仅当返回值为0时pError参数才有意义
先直观的举两个读写的例子:
//文件写入
if(!file.Open(lpszPathName,CFile::modeCreate|CFile::modeWrite|CFile::modeNoTruncate,NULL))
{
ReportSaveLoadException(lpszPathName,&fe,FALSE,AFX_IDP_FAILED_TO_OPEN_DOC);
return FALSE;
}
file.Write(buf,len);
//文件读出
file.Open("E:\\VC\\1.txt",CFile::modeRead,NULL);
file.Read(Buf,len);
其中buf是数据指针,len是要写入/读取的字节数,在文件操作完毕后,需要执行file.close( )关闭文件柄。
接下来具体说明一下open()函数里的参数含义:
nOpenFlags的常用模式有:
表1-1 CFile文件打开方式 |
|
标志 |
含义 |
CFile::modeCreate |
创建新文件,如果文件已存在,则将其长度变成0 |
CFile::modeNoTruncate |
可以同modeCreate. 一起用,如果要创建的文件已经存在,并不把它长度设置为0,因而这个文件获取或者作为一个新建文件或者作为一个已存在文件打开。这个功能往往很好用,比如说,当你需要打开一个设置文件,但是你并不清楚这个文件是否已经存在。 |
CFile::modeRead |
以只读方式打开文件 |
CFile::modeReadWrite |
以读写方式打开文件 |
CFile::modeWrite |
以只写方式打开文件 |
CFile::modeNoInherit |
组织该文件被子项继承 |
CFile::shareDenyNone |
以共享模式打开文件,不会禁止其他进程对文件的读写,如果文件被其它进程以incompatibility模式打开,这是create操作会失败。 |
CFile::shareDenyRead |
禁止其他进程对文件的读操作,如果文件被其它进程用compatibility模式或者是读方式打开,create操作失败。 |
CFile::shareDenyWrite |
禁止其他进程对文件的写操作,如果文件被其它进程用compatibility模式或者是读方式打开,create操作失败。 |
CFile::shareExclusive |
以独占模式打开文件,禁止其他进程对文件的读写 |
CFile::typeText |
以文本方式打开文件 |
CFile::typeBinary |
以二进制方式打开文 |
参数:
lpszFileName 需要打开文件的路径字符串,这个路径可以是相对路径也可以是绝对路径,或者是网络名字(UNC)
nOpenFlags 一个UINT定义文件的存取共享模式。它指定文件打开时可以采取的操作。你可以使用”|"号来组合多个选项。文件的一个存取权限和一个共享选项是必须要指定的。而modeCreate 和modeNoInherit是可选的。
CFile提供了一些常用的操作函数,如表1-2所示。
表1-2 CFile操作函数 |
|
函数 |
含义 |
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 offset,UINT nFrom) 把文件指针移动到指定位置
lOff :是指针偏移字节数,若向后偏移则为正数,若向前偏移,则为负数。
nFrom:MSDN上有三种取值:
CFile::begin 从文件开头开始算起,lOff为正数;
CFile::current 当前位置开始算起;
CFile::end 从文件结尾开始算起,lOff为负数;
SeekToBegin() 把文件指针移到文件开头
SeekToEnd() 把文件指针移到文件末尾
GetPosition( ) 返回当前文件指针的位置