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. cgi_and_fastcgi

    CGI 来自维基百科 In computing, Common Gateway Interface (CGI) offers a standard protocol for web servers t ...

  2. spark 之主成分分析

    C4∗2

  3. block的优势

    https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Blocks/Articles/bxOvervie ...

  4. shell脚本,对MySQL数据库进行分库加分表备份

    [root@localhost wyb]# cat table_backup.sh #!/bin/bash flag= user=root pass=test mysql -u$user -p&quo ...

  5. Xcode 6 创建 Objective-C category

    1. Command + N 2. 选择 iOS - Source - Objective-C File 3.File Type 选择 Category,Class 填基于的类名,File填扩展的名

  6. ios retain copy 以及copy协议

    阅读本文之前首先了解Copy与Retain的区别: Copy是创建一个新对象,Retain是创建一个指针,引用对象计数加1. Copy属性表示两个对象内容相同,新的对象retain为1 ,与旧有对象的 ...

  7. Bzoj 1088: [SCOI2005]扫雷Mine (DP)

    Bzoj 1088: [SCOI2005]扫雷Mine 怒写一发,算不上DP的游戏题 知道了前\(i-1\)项,第\(i\)项会被第二列的第\(i-1\)得知 设\(f[i]\)为第一列的第\(i\) ...

  8. [BZOJ] 2662: [BeiJing wc2012]冻结

    https://www.lydsy.com/JudgeOnline/problem.php?id=2662 第一次写分层图(捂脸) 一开始真的naive地建图了,T到飞起.. 可以省下建图的空间,直接 ...

  9. curl学习笔记(以php为例)

    一.demo,抓取百度页码代码: $url = 'https://www.baidu.com/'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RE ...

  10. RTC-ISL128

    Real Time Clock (RTC) Drivers for Linux ======================================= When Linux developer ...