1.文件写入

void  CMFCApplication1Dlg::Write()
{
CFile file;
CString FileName = "D:\\100w.txt";
memset(buf, , NUM);//初始化内存,防止读出字符末尾出现乱码
for (int i = ; i < NUM; i++)
{
if ((i / )% == )
buf[i] =;
else
buf[i] = ;
}
// TODO: Add your control notification handler code here
int aa = buf[NUM/];
try
{
file.Open(FileName, CFile::modeCreate | CFile::modeWrite|CFile::typeBinary);
//CArchive ar(&file, CArchive::store);//根据打开的文件,创建文件串行化对象
//Serialize(ar); //写文件内容
//ar.Write(buf, NUM);
////结束后关闭对象
//ar.Close();
file.SeekToBegin();
int len = NUM*sizeof(short int);
file.Write(buf, NUM*sizeof(short int));//CString m_data
//file.Flush();
file.Close();
MessageBox("写入成功!");
}
catch (CFileException *e)
{
CString str;
str.Format("写入失败的原因是:%d", e->m_cause);
MessageBox("str");
file.Abort();
e->Delete();
}
}

2.文件读取

void CMFCApplication1Dlg::Read()
{
CFile file;
CString FileName = "D:\\data.txt";
short int buf[];//读1K
memset(buf, , *sizeof(short int));//初始化内存,防止读出字符末尾出现乱码
try
{
if (!file.Open(FileName, CFile::modeRead))
{
MessageBox("没有文件!");
return;
}
file.Seek( * sizeof(short int), CFile::begin); //结构体格式读取
//DATAS aa;
//file.Read(&aa, sizeof(aa));
file.Read(buf, sizeof(buf));
file.Close();
MessageBox("读出成功!");
}
catch (CFileException *e)
{
CString str;
str.Format("读取数据失败的原因是:%d", e->m_cause);
MessageBox("str");
file.Abort();
e->Delete();
}
}

3.文件的查找

  当对一个文件操作时,如果不知道该文件是否存在,就要首先进行查找。MFC中有一个专门用来进行文件查找的类CFileFind,使用它可以方便快捷地进行文件的查找。下面这段代码演示了这个类的最基本使用方法。

  CString strFileTitle;
  CFileFind finder;
  BOOL bWorking = finder.FindFile("C:\\windows\\sysbkup\\*.cab");

4.项目用到的分页读取

读:

void  CWave::ShowByPaging_W(CString strPath, int nPageNum, bool bIsShowI, bool bIsShowQ)
{
CFile file;
int nReadDataCount = ;
memset(data_W, , nDataNumOfPage_W* * sizeof(short int));
try
{
if (!file.Open(strPath, CFile::modeRead))
{
MessageBox("没有文件!");
return;
}
file.Seek((nPageNum-) *nDataNumOfPage_W**sizeof(short int), CFile::begin); //返回实际读到参数。若读出数据小于20W,则表示已到末尾;此时读的是字节数
int nReadChar = file.Read(data_W, sizeof(short int)**nDataNumOfPage_W);
nReadDataCount = nReadChar / / sizeof(short int);
//file.Read(buf, sizeof(buf));
file.Close();
}
catch (CFileException *e)
{
//CString str;
//str.Format("读取数据失败的原因是:%d", e->m_cause);
//MessageBox("str");
file.Abort();
e->Delete();
}
int startLoc = nDataNumOfPage_W*(m_nCurPageNum_W-);
int count = ;
for (int i = ; i <nDataNumOfPage_W * ; i++)
{
if (i % == )
data_WQ[i / ] = data_W[i] * m_DeltaY_W;
else
data_WI[i / ] = data_W[i] * m_DeltaY_W;
if (i % == )
{
count++;
data_WX[i / ] = (startLoc+count)* m_DeltaX_W;
}
} LoadData_W(nDataNumOfPage_W, data_WX, data_WI, data_WQ, bIsShowI, bIsShowQ);
}

写:

bool writeFileByData(CString strFileName, UINT16 buf[], int len)
{
string strPath = m_strSavePath_trans+"\\" + strFileName + ".bin"; CFile file;
try
{
//CFile::modeCreate 创建方式打开文件,如文件已存在则将其长度设置为0
//CFile::modeNoTruncate 创建文件时如文件已存在不对其进行截断
//CFile::modeRead 只读方式打开文件
//CFile::modeReadWrite 读写方式打开文件
//CFile::modeWrite 写入方式打开文件
//CFile::typeBinary 设置文件为二进制模式
//CFile::typeText 设置文件为文本模式
file.Open(strPath.c_str(), CFile::modeCreate|CFile::modeNoTruncate | CFile::modeWrite | CFile::typeBinary);
//CArchive ar(&file, CArchive::store);//根据打开的文件,创建文件串行化对象
//Serialize(ar); //写文件内容
//ar.Write(buf, NUM);
////结束后关闭对象
//ar.Close();
file.SeekToEnd();
file.Write(buf, len*sizeof(UINT16));//CString m_data
//file.Flush();
file.Close();
return true;
}
catch (CFileException *e)
{
CString str;
str.Format("写入失败的原因是:%d", e->m_cause);
//MessageBox("str");
file.Abort();
e->Delete();
return false;
}
return false;
}

1. 文件模式标志 说明

  CFile::modeCreate  创建方式打开文件,如文件已存在则将其长度设置为0

  CFile::modeNoInherit  不允许继承

  CFile::modeNoTruncate 创建文件时如文件已存在不对其进行截断

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

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

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

  CFile::shareCompat 在使用过程中允许其他进程同时打开文件

  CFile::shareDenyNone 在使用过程中允许其他进程对文件进行读写

  CFile::shareDenyRead 在使用过程中不允许其他进程对文件进行读取

  CFile::shareDenyWrite 在使用过程中不允许其他进程对文件进行写入

  CFile::shareExclusive  取消对其他进程的所有访问

  CFile::typeBinary 设置文件为二进制模式

  CFile::typeText 设置文件为文本模式

参考链接:

http://www.jizhuomi.com/software/234.html

http://www.jizhuomi.com/software/497.html

http://blog.sina.com.cn/s/blog_69b9bb050100lelo.html

http://blog.csdn.net/iscassucess/article/details/8210069

[MFC] CFile读写文件实现(高效)的更多相关文章

  1. MFC CFile类读写文件详解

    CFile类提供了对文件进行打开,关闭,读,写,删除,重命名以及获取文件信息等文件操作的基本功能,足以处理任意类型的文件操作. 一个读写文件的例子: 文件I/O 虽然使用CArchive类内建的序列化 ...

  2. MFC读写文件详解

    1.CFile类提供了对文件进行打开,关闭,读,写,删除,重命名以及获取文件信息等文件操作的基本功能,足以处理任意类型的文件操作. 虽然使用CArchive类内建的序列化功能是保存和加载持久性数据的便 ...

  3. c# 高效读写文件

    一.同步读写文件(在并发情况下不会发生文件被占用异常) static void Main(string[] args) { Parallel.For(0, 10000, e => { strin ...

  4. RandomAccessFile类——高效快捷地读写文件

    RandomAceessFile类 RandomAccessFile类是一个专门读写文件的类,封装了基本的IO流,在读写文件内容方面比常规IO流更方便.更灵活.但也仅限于读写文件,无法像IO流一样,可 ...

  5. VC++读写文件

    目录 第1章读写文件    1 1.1 API    1 1.2 低级IO    1 1.2.1 文件序号    1 1.2.2 文本文件与二进制文件    1 1.3 流IO    2 1.4 Un ...

  6. 计算机程序的思维逻辑 (60) - 随机读写文件及其应用 - 实现一个简单的KV数据库

    57节介绍了字节流, 58节介绍了字符流,它们都是以流的方式读写文件,流的方式有几个限制: 要么读,要么写,不能同时读和写 不能随机读写,只能从头读到尾,且不能重复读,虽然通过缓冲可以实现部分重读,但 ...

  7. Qt的Model/View Framework解析(数据是从真正的“肉(raw)”里取得,Model提供肉,所以读写文件、操作数据库、网络通讯等一系列与数据打交道的工作就在model中做了)

    最近在看Qt的Model/View Framework,在网上搜了搜,好像中文的除了几篇翻译没有什么有价值的文章.E文的除了Qt的官方介绍,其它文章也很少.看到一个老外在blog中写道Model/Vi ...

  8. Java开发笔记(八十六)通过缓冲区读写文件

    前面介绍了利用文件写入器和文件读取器来读写文件,因为FileWriter与FileReader读写的数据以字符为单位,所以这种读写文件的方式被称作“字符流I/O”,其中字母I代表输入Input,字母O ...

  9. Java编程的逻辑 (60) - 随机读写文件及其应用 - 实现一个简单的KV数据库

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

随机推荐

  1. 万事先问『为什么』 what why how

    万事先问『为什么』! 遇到问题时,很多人的行为模式顺序是,先问『做什么』,『怎么做』,他们从来不问『为什么』,他们对根源性问题很模糊. 而聪明人则是先问『为什么』,再去构建『怎么做』,而『做什么』就是 ...

  2. winform中让显示的图片覆盖到父窗体保持父窗体的不可选中的状态,且任务栏中不会显示子窗体的任务选项

    要求:为父窗体添加一个类似于加载等待的功能,当窗体点击备份时弹出且覆盖掉窗体 问题一产生:当为弹窗添加控件时,form.show();导致窗体卡死,控件变得透明化; 问题一分析:当窗体show();之 ...

  3. 把apk文件拖到re-sign.jar运行打开的界面找不到指定文件

    下载一个zipalign.exe放到tools目录下面就可以了 点击下载

  4. 安装VC++6.0实验环境

    安装VC++6.0步骤:(1)下载一个压缩包进行解压(2)点击打开解压后的文件(3)找到文件里的程序进行安装(4)等待安装完成该程序后可以试着运行一下此程序,在此我们需要了解编写程序的步骤和注意事项. ...

  5. 修改linux的时区问题

    修改linux的时区问题 配置服务器节点上的时区的步骤: 1.先生成时区配置文件Asia/Shanghai,用交互式命令 tzselect 即可: 2.拷贝该时区文件,覆盖系统本地时区配置: cp / ...

  6. hihoCoder-1097-Prim

    这题就是prim的板子题,不过如果用end每次初始化为-1的话,我们就不需要对于每次选中的下一个点进行判断是否选中了,因为每次外层循环第一次进入都是可以的. 然后还很 (i=1:i<=n;i++ ...

  7. perl学习之:正则表达式

  8. Linux配置使用SSH Key登录并禁用root密码登录(替换同理)

    Linux系统大多说都支持OpenSSH,生成公钥.私钥的最好用ssh-keygen命令,如果用putty自带的PUTTYGEN.EXE生成会不兼容OpenSSH,从而会导致登录时出现server r ...

  9. nrf52832开发配置文件小记

    nrf52832在配置定时器和port事件的时候,需要在nrf_drv_config.h(sdk12.x.0版本)文件中,将相应的使能,比如:#define TIMER0_ENABLED 1否则,是不 ...

  10. 组队赛Day1第一场 GYM 101350 G - Snake Rana (容斥)

    [题意] 给一个N×M的矩阵, K个地雷的坐标.求不含地雷的所有矩形的总数. T组数据. N M都是1e4,地雷数 K ≤ 20 Input 3 2 2 1 2 2 6 6 2 5 2 2 5 100 ...