MFC提供了CFile类方便文件的读写,首先要知道,文件的数据读取、数据写入与文件指针的操作都是以字节为单位的,数据的读取和写入都是从文件指针的位置开始的,当打开一个文件的时候,文件指针总是在文件的开头。常规方法如下:

CFile file;

file.open( LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL );

//pszFileName是文件名,可包含文件路径,若只有文件名,则默认路径为工程路径,nOpenFlags是文件打开模式,pError是打开失败时用来接收失败信息,一般设置为NULL。

nOpenFlags的常用模式有:

表1-1  CFile文件打开方式

标志

含义

CFile::modeCreate

创建新文件,如果文件已存在,则将其长度变成0

CFile::modeNoTruncate

与modeCreate组合使用,如果文件已存在,则不会将其长度变成0

CFile::modeRead

以只读方式打开文件

CFile::modeReadWrite

以读写方式打开文件

CFile::modeWrite

以只写方式打开文件

CFile::modeNoInherit

组织该文件被子项继承

CFile::shareDenyNone

以共享模式打开文件,不会禁止其他进程对文件的读写

CFile::shareDenyRead

禁止其他进程对文件的读操作

CFile::shareDenyWrite

禁止其他进程对文件的写操作

CFile::shareExclusive

以独占模式打开文件,禁止其他进程对文件的读写

CFile::typeText

以文本方式打开文件

CFile::typeBinary

以二进制方式打开文件

CFile::modeCreate     若打开文件不存在,则创建一个新文件,如果该文件存在,则清空它的数据。

CFile::modeNoTruncate    与CFile::modeCreate 组合使用。如果文件不存在,则创建一个新文件,如果文件存在,则保留他原本的数据。

CFile::modeRead      打开文件用于读取数据。

CFile::modeWrite      打开文件用于写入数据。

CFile::modeReadWrite  打开文件用于读取和写入数据。

CFile::typeBinary      使用二进制文件模式。此模式仅用于CFile的派生类。

CFile::typeText         使用文本文件模式。此模式仅用于CFile的派生类。

CFile默认使用二进制模式读写文件,CFile无法使用文本模式读写文件。

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 lOff, UINT nFrom )   把文件指针移动到指定位置

lOff :是指针偏移字节数,若向后偏移则为正数,若向前偏移,则为负数。

nFrom :MSDN上有三种取值:

CFile::begin  从文件开头开始算起,lOff为正数;

CFile::current  当前位置开始算起;

CFile::end     从文件结尾开始算起,lOff为负数;

SeekToBegin( )      把文件指针移到文件开头

SeekToEnd( )          把文件指针移到文件末尾

GetPosition( )        返回当前文件指针的位置

获取文件的字节数可用 GetLength( )  此函数的返回值为DWORD,但可直接用来分配数组元素数目,例如:

DOWRD len=file.GetLength();

char *pBuf=new char[len+1]   / int *pBuf=new int[len/4]

char占一个字节,int占四个字节。

写入文件:

CFile file;

file.Open("E:\\VC\\1.txt",CFile::modeCreate|CFile::modeWrite|CFile::modeNoTruncate,NULL);

file.Write("HelloWorld",strlen("HelloWorld"));

//Write( const void* lpBuf, UINT nCount )  lpBuf是写入数据的Buf指针,nCount是Buf里需要写入文件的字节数

file.close( );

读取文件:

CFile file;

file.Open("E:\\VC\\1.txt",CFile::modeRead,NULL);

DWORD len=file.GetLength( );

char Buf[len+1];

Buf[len]=0;  //0终止字符串,用于输出。

file.Read(Buf,len);   //Read( void* lpBuf, UINT nCount ) lpBuf是用于接收读取到的数据的Buf指针nCount是从文件读取的字节数

MessageBox(Buf);

MFC之CFile读取和写入文件相关推荐

  1. python读取写入文件_Python读取和写入文件

    1 从文件中读取数据 1.1 读取整个文件 创建名为test的txt文本文件,添加内容如下所示: 1234567890 2345678901 3456789012 实现代码: with open('t ...

  2. MFC中CFile读取中文乱码

    在Unicode下使用MFC的CFile读取有中文的文件,直接显示会显示乱码. 解决办法:使用CA2W进行转换编码即可 CFile file;if (file.Open(m_pDoc->m_st ...

  3. sublime python3中读取和写入文件时如何解决编码问题

    sublime python3中读取和写入文件时如何解决编码问题 参考文章: (1)sublime python3中读取和写入文件时如何解决编码问题 (2)https://www.cnblogs.co ...

  4. java写入文件编码格式为ansi_Java读取、写入文件如何解决乱码问题

    读取文件流时,经常会遇到乱码的现象,造成乱码的原因当然不可能是一个,这里主要介绍因为文件编码格式而导致的乱码的问题.首先,明确一点,文本文件与二进制文件的概念与差异. 文本文件是基于字符编码的文件,常 ...

  5. Flutter进阶—读取与写入文件

    Flutter使用path_provider插件读取与写入文件,path_provider插件提供了一种平台无关的方法来访问设备文件系统上常用的位置.该类目前支持访问两个文件系统位置: 临时目录:系统 ...

  6. 读取和写入文件的最简单方法

    本文翻译自:Easiest way to read from and write to files There are a lot of different ways to read and writ ...

  7. nodejs:fs (内置模块)读取和写入文件

    node fs (内置模块)读取和写入文件 const fs = require("fs"); //异步读取文件 fs.readFile("data.txt", ...

  8. go语言逐行读取和写入文件

    前言 前面一篇博客讲到nodejs使用readline逐行读取和写入文件 今天使用go语言实现从输入文件中读取每行数据,然后将每行字段组合成SQL插入脚本,然后逐行写入另外一个空白文件中. tb_pa ...

  9. HttpWebRequest FileStream分块读取和写入文件WebClient

    //HttpWebRequest  下载文件 private void DownloadFile(string filePath)           {               string[] ...

最新文章

  1. Docker学习(一)-----Docker简介与安装
  2. Windows CE Notification API的使用方法
  3. 中国最后一个原始部落-农业大健康·万祥军:历史千年传承
  4. 5.Hadoop的学习(Hadoop的配置(伪分布式的搭建)-1)
  5. know about用法
  6. 前端学习(650):标识符 关键字 保留字
  7. webpack 报错 No PostCSS Config found 解决方案。
  8. Java 编译,运行错误之 java.lang.UnsupportedClassVersionError: Bad version n umber in .class file
  9. 【软件测试】软件测试的基本流程(一般步骤)
  10. 如何快速制作漫画App?
  11. 《信息安全技术—个人信息安全影响评估指南》pdf下载
  12. Debian stretch failed to load firmware rtl_nic/rtl8168g-3.fw (-2)
  13. ckplayer只调用html,CKplayer 新手入门超简单使用教程
  14. 数理逻辑 | 自然演绎规则整理
  15. CTF_crypto常见加密密文特征
  16. 基于 Openocd 和 FT2232H 的 ARMv8(Coretex-A53)调试
  17. 从身家500万到两手空空,看她如何再次成功翻身
  18. 正规的打码网站使用方法有哪些
  19. 最新Discuz手机模板NVBING5手机版源码+可封装APP
  20. R语言-trunc()、ceiling()、floor()、round()函数区别

热门文章

  1. C-kermit使用
  2. 操作系统的简介(UNIX、Linux)
  3. c盘java文件误删_C盘误删文件如何恢复?
  4. mint-ui message box confirm弹框确认和取消按钮的回调
  5. SF简易IDC系统V1.0免授权
  6. 过来人:软件测试自学还是报班好?需要掌握哪些技能?
  7. tex live iso linux,TeX Live安装教程
  8. 传奇私服中检查人物穿戴指定装备的两种方法
  9. 实现点击按钮 复制文本内容
  10. enc28j60 linux 驱动_linux enc28j60网卡驱动移植(硬件spi和模拟spi)