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基本用法留着以后可以随时使用!

  • 21
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坤昱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值