MFC:CFile类的使用

为方便对文件操作,MFC提供了CFile类用于文件的读写操作,具体包括文件数据的读取、写入以及文件内部指针的移动等。打开文件时,会有一个指向该文件的指针,同时还生成一个指向具体数据的内部指针,用于记录读取或写入的位置,文件刚打开时,内部指针指向文件开始位置,随着读或写的操作,内部指针会自动移动位置。内部指针移动可通过相关函数进行,移动的单位为字节。

一、使用CFile操作文件的步骤:

(一)、构造CFile类对象

CFile 参1; //参1 CFile对象名

(二)、调用CFile::Open()函数创建或打开指定文件

格式:file.open(

LPCTSTR lpszFileName,

UINT nOpenFlags,

CFileException* pError = NULL );

参1 文件名(可包含路径,只有文件名,默认为项目目录)

参2 文件打开模式,取值包括:

CFile::modeCreate //创建新文件,如文件已存在,则将长度变成0

CFile::modeNoTruncate //创建新文件,如果文件已存在,写入内如追加在最后

CFile::modeRead //以只读方式打开文件

CFile::modeReadWrite //以读写方式打开文件

CFile::modeWrite //以只写方式打开文件

CFile::typeText //以文本方式打开文件

CFile::typeBinary //以二进制方式打开文件

参3 pError //打开失败时用来接收失败信息,一般使用其默认值NULL

(三)、调用CFile::Write()函数写入文件

使用格式:

CFile::Write(

const void* lpBuf,

UINT nCount)

参1 准备写入的字符串变量指针

参2 写入的字节数

说明:

a. Write()是CFile类对象成员函数,需要CFile类对象或指针调用。

b. 参1 lpBuf是指向写入数据的指针,类型可以是char*或TCHAR*。如要写入的内容在CString对象中,应先将其转为char*或TCHAR*。如希望使用CString对象的成员函数GetLength获取字符串长度来计算参2所用的字节数,应注意在UNICODE字符集下使用TCHAR每个字符的字节数是2(所谓宽字符)。类似的CFile类对象也有一个同名函数GetLength,得到的结果是字节数,宽字符条件下换成字符数要除以2;这两个函数要注意区别。

c.鉴于参1的类型,写入的内容都是字符串,无论是char*还是TCHAR*。因此,每次写入都是一个字符串;如字符串中包结束符"\0",即使未超过参2的字节数,但结束符后边的内容也不会被写入文件。

d.如果是写入数组,合理的做法是开循环,一次只写入一个元素的长度,分次写入。如果是自定义类数组,也是开循环,在循环内将自定义类的各个属性再转成字符串后分次写入。

(四)、调用CFile::Read()读取文件

使用格式:

CFile::Read(

void* lpBuf,

UINT nCount )

参1:lpBuf是用于接收读取到的字符串的指针

参2:nCount是从文件读取的字节数

说明:

a.CFIle::Read函数是CFile类的成员函数,需要CFile对象或指针调用。

b.参2可通过CFile::GetLength()获得(字节数)。

c.如果文件中的数据是数组,读取方法是把上面介绍的写入方法反过来。具体是提前定义好一个接收数组,然后按数组元素个数开循环,读取后转成需要的类型依次存入数组;如是自定义类数组,在循环中读取各属性后转成需要的类型存入数组。

d.TCHAR与相关类型转换函数:

CString类型转成TCHAR[]的函数:wcscpy_s(tchar*,cstring)

int转成TCHAR字符串函数:wsprintf(tchar*,L"格式字符串",int)

TCHAR字符串可直接赋值给CString对象:CString a=(TCHAR[]) b

TCHAR字符串转int:int=_wtoi(TCHAR* pTchar)

(五)、调用CFile::Close()关闭

使用格式:

CFile::Close(); //无参

说明:

a. CFile::Close()是CFile类的成员函数,需CFile类对象或指针调用。

b. Close对应的是Open函数,CFile类对象还在,我们仍可以使用Open函数重新打开或打开其它文件。

二、CFile类的其它成员函数

CFile::Flush();

功能:刷新待写的数据

参数:无

CFile::GetLength();

功能:获取文件的大小

参数:无

返回值:无符号长整型类型的从文件开始至文件尾的字节数

CFile::Seek(参1,参2);

功能:定位文件内部指针指向指定位置

参数:

参1 偏移量(单位:字节),负值表示向回移动

参2 起始位置(取值:CFile::begin,CFile::current,CFile::end)

返回值:返回从文件开始位置至移动后位置的字节数

CFile::SeekToBegin();

功能:定位文件内部指针至文件头

参数:无

返回值:无

CFile::SeekToEnd();

功能:定位文件内部指针至文件尾

参数:无

返回值:返回文件长度(字节数),类型为无符号长整形

CFile::GetFileName();

功能:获取文件名

参数:无

返回值:返回CString类型的文件名字符串

CFile::GetFilePath();

功能:获取文件路径及文件名

参数:无

返回值:返回CString类型的字符串

CFile::GetPosition();

功能:获得当前文件内部指针的读写位置

参数:无

返回值:返回无符号长整型(DWORD)类型的内部指针位置

CFile:: GetStatus();

功能:取当前文件的状态

参数:CFileStatus对象

返回值:成功返回true,失败返回false

说明:CFileStatus对象的属性包括,m_ctime文件创建的时间、m_mtime文件最后一次修改的时间、m_atime最后一次访问文件并读取的时间、m_size文件逻辑长度(以字节数表示)、m_attribute文件属性字节、m_szFullName[_MAX_PATH]全文件名。

相关推荐
0xCC说逆向2 天前
Windows图形界面(GUI)-QT-C/C++ - QT 窗口属性
c语言·开发语言·c++·windows·qt·mfc
编程乐趣4 天前
盘点下5个Winform UI开源控件库
ui·开源·mfc
ぃ扶摇ぅ4 天前
MFC程序设计(一)MFC入门
c++·mfc
0xCC说逆向8 天前
Windows图形界面(GUI)-QT-C/C++ - Qt控件与布局系统详解
c语言·开发语言·c++·windows·qt·mfc·win32
yerennuo8 天前
windows第五章 MFC基本消息和消息映射介绍
c++·windows·mfc
0xCC说逆向8 天前
Windows图形界面(GUI)-QT-C/C++ - QT控件创建管理初始化
c语言·开发语言·c++·windows·qt·mfc·sdk
0xCC说逆向8 天前
Windows图形界面(GUI)-QT-C/C++ - QT信号与槽机制详解
java·c语言·开发语言·c++·windows·qt·mfc
0xCC说逆向9 天前
Windows图形界面(GUI)-QT-C/C++ - Qt图形绘制详解
c语言·开发语言·c++·windows·qt·mfc·win32
nSponge13 天前
【MFC】设置CTreeCtrl单个节点的文字颜色
c++·mfc
天上的猩猩Y13 天前
VS调试MFC进入系统源代码配置
c++·mfc