CFile用法与实现

来源:互联网 发布:java实时读取log文件 编辑:程序博客网 时间:2024/06/01 10:00

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

原创粉丝点击