[MFC] CFile读写文件实现(高效)
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读写文件实现(高效)的更多相关文章
- MFC CFile类读写文件详解
CFile类提供了对文件进行打开,关闭,读,写,删除,重命名以及获取文件信息等文件操作的基本功能,足以处理任意类型的文件操作. 一个读写文件的例子: 文件I/O 虽然使用CArchive类内建的序列化 ...
- MFC读写文件详解
1.CFile类提供了对文件进行打开,关闭,读,写,删除,重命名以及获取文件信息等文件操作的基本功能,足以处理任意类型的文件操作. 虽然使用CArchive类内建的序列化功能是保存和加载持久性数据的便 ...
- c# 高效读写文件
一.同步读写文件(在并发情况下不会发生文件被占用异常) static void Main(string[] args) { Parallel.For(0, 10000, e => { strin ...
- RandomAccessFile类——高效快捷地读写文件
RandomAceessFile类 RandomAccessFile类是一个专门读写文件的类,封装了基本的IO流,在读写文件内容方面比常规IO流更方便.更灵活.但也仅限于读写文件,无法像IO流一样,可 ...
- 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 ...
- 计算机程序的思维逻辑 (60) - 随机读写文件及其应用 - 实现一个简单的KV数据库
57节介绍了字节流, 58节介绍了字符流,它们都是以流的方式读写文件,流的方式有几个限制: 要么读,要么写,不能同时读和写 不能随机读写,只能从头读到尾,且不能重复读,虽然通过缓冲可以实现部分重读,但 ...
- Qt的Model/View Framework解析(数据是从真正的“肉(raw)”里取得,Model提供肉,所以读写文件、操作数据库、网络通讯等一系列与数据打交道的工作就在model中做了)
最近在看Qt的Model/View Framework,在网上搜了搜,好像中文的除了几篇翻译没有什么有价值的文章.E文的除了Qt的官方介绍,其它文章也很少.看到一个老外在blog中写道Model/Vi ...
- Java开发笔记(八十六)通过缓冲区读写文件
前面介绍了利用文件写入器和文件读取器来读写文件,因为FileWriter与FileReader读写的数据以字符为单位,所以这种读写文件的方式被称作“字符流I/O”,其中字母I代表输入Input,字母O ...
- Java编程的逻辑 (60) - 随机读写文件及其应用 - 实现一个简单的KV数据库
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
随机推荐
- 使用memcached缓存 替代solr中的LRUCache缓存
前沿 在搜索引擎中,缓存被当做是不可缺少的部分,但是很多情况下,将缓存的实现过度依赖于分发服务器及webserver会很大程度上加重webserver 的负担,具体表现就是经常性的假死,拒绝服务,因此 ...
- 与调试器共舞 - LLDB 的华尔兹
你是否曾经苦恼于理解你的代码,而去尝试打印一个变量的值? 1 NSLog(@"%@", whatIsInsideThisThing); 或者跳过一个函数调用来简化程序的行为? 1 ...
- MIPS——分支语句
有关指令 li $t1,immediate #load immediate,立即数可正可负 la $t1,address #load address move $t1,$t2 #move $t2 to ...
- 解决IllegalBlockSizeException:last block incomplete in decryption异常
解决IllegalBlockSizeException:last block incomplete in decryption异常分类: webkit android最近做个加解密的实现,虽然实现了, ...
- LeetCode || 递归 / 回溯
呜呜呜 递归好不想写qwq 求“所有情况”这种就递归 17. Letter Combinations of a Phone Number 题意:在九宫格上按数字,输出所有可能的字母组合 Input: ...
- python logging with yaml
Recently, I was made a service which can provide a simple way to get best model. so, i spent lot of ...
- JavaScript正则表达式-或字符
或字符是一个单竖线“|”,表示字符串只要匹配“|”连接的多个表达式中的任意一个. /ab|ac|bc/表示字符串匹配ab,或者匹配ac,或者bc
- cs229_part5
这部分主要补充一些cs229没涉及到,但是实际上非常重要,而且是实际中真正会用的一些算法,即集成学习. 集成学习 问题背景 既然我们已经知道了很多学习算法,这些算法最终会输出一个结果.能不能把这些结果 ...
- PAT Basic 1072
1072 开学寄语 下图是上海某校的新学期开学寄语:天将降大任于斯人也,必先删其微博,卸其 QQ,封其电脑,夺其手机,收其 ipad,断其 wifi,使其百无聊赖,然后,净面.理发.整衣,然后思过.读 ...
- Untiy CurvedUI 的使用的bug修正
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/51996538 作者:car ...