CFile用法与实现

编程中使用VC语言读写文件时,我比较喜欢用CFile来做这些工作,简单而强大的功能(一行代码就可以完成读取文件或者写入文件)。

CFile采用API函数做函数内核,比如Open函数内部采用CreateFile作为打开文件方法,下面贴上CFile内部函数以及对应调用的API函数:(本例子以CFile file_作为参考对象)
1.Open()函数:

    file_.Open("C:\\Users\\Administrator\\Desktop\\JM122372075R90250000000.doc",CFile::modeRead /*| CFile::modeCreate | CFile::modeNoTruncate*/);//加注释这两个参数说明下多参数的使用方式 
//打开文件方法
//第一个参数 文件路径 ,如果是串口输入COM1(COM后面加上串口号)
//第二个参数 文件操作模式 列举常用的几种模式:
CFile::modeCreate 文件以创建形式打开(创建一个新的文件,老文件数据将会丢失 ,可以配合CFile::modeNoTruncate 一起使用,不会覆盖老文件)

CFile::modeRead  采用读取方式打开文件

CFile::modeWrite 采用写入方式打开文件

CFile::modeReadWrite 采用读写方式打开文件

CFile::modeNoTruncate 采用不截断形式打开文件(与CFile::modeCreate配合使用在文件存在的情况下不会创建新的文件, 与CFile::modeWrite配合使用在文件有数据的情况下写入数据不会清空文件数据(会存在数据覆盖现象,下面会讲文件写入位置设置方法))

CFile::modeNoInherit 防止这个将要被打开的文件来源于子进程(实际几乎用不到)

CFile::typeBinary 文件数据将会以二进制的形式显示

CFile::shareDenyNone 采用共享形式打开文件(这个文件在不做读写的情况下打开)

函数内部调用API:
CreateFile(lpszFileName, dwAccess, dwShareMode, &sa, dwCreateFlag, dwFlags, NULL);

2.GetLength()函数:

int nlen = file_.GetLength();
//获取文件的当前总长度(读或写文件时可以随时调用函数查看文件的长度)方法

函数内部调用API:
GetFileSize(m_hFile, &liSize.HighPart);

3.Read()函数:

char GetStr[4096] = {0};
file_.Read(GetStr,4096);
//读取文件(串口)方法 

函数内部调用API:
ReadFile(m_hFile, lpBuf, nCount, &dwRead, NULL);
//内部采用同步读取方式(在串口读取方面我更喜欢异步方式,相关参考我的API串口异步文章)

4.Write()函数:

char GetStr[4096] = {0};
memcpy(GetStr,"123yui",sizeof(char) * 6);
file_.Write(GetStr,4096);
//写入文件(串口)方法 

函数内部调用API:
WriteFile(m_hFile, lpBuf, nCount, &nWritten, NULL);

5.Seek()函数:

//文件调整指向数据(跳转数据)方法
file_.Seek(6,CFile::begin);//数据位置从文件开始向后移动6个字节

file_.Seek(6,CFile::current);//数据位置从当前位置向后移动6个字节

file_.Seek(-6,CFile::end);//数据位置从文件末端向前移动6个字节

函数内部调用API:
SetFilePointer(m_hFile, liOff.LowPart, &liOff.HighPart,
      (DWORD)nFrom);

6.Close()函数:

file_.Close();
//文件关闭方法(不需要操作这个打开文件时随手释放文件句柄)

函数内部调用API:
CloseHandle(m_hFile);

简单介绍了CFile的基本用法,下面贴上组合用法:

//读文件
CFile file_;
file_.Open("C:\\Users\\Administrator\\Desktop\\JM122372075R90250000000.doc",CFile::modeNoTruncate | CFile::modeCreate | CFile::modeRead);//打开文件
int nlen = file_.GetLength();//获取文件总长度
char GetStr[4096] = {0};
file_.Seek(6,CFile::begin);//数据位置跳到第6个字节
file_.Read(GetStr,4096);//这里读了4096个字节
file_.Close();//关闭文件

//写文件
CFile file_;
file_.Open("C:\\Users\\Administrator\\Desktop\\JM122372075R90250000000.doc",CFile::modeNoTruncate | CFile::modeCreate | CFile::modeWrite);//打开文件
int nlen = file_.GetLength();//获取文件总长度
char GetStr[4096] = {0};
memcpy(GetStr,"123yui",6);
file_.SeekToEnd();//数据位置跳到文件末端
file_.Write(GetStr,6);//这里写了6个字节
file_.Close();//关闭文件

关于CFile的使用方法还有好多没有介绍,这里简单介绍了CFile基本用法留着以后可以随时使用!

你可能感兴趣的:(windows,Windows的精髓)