基于MFC的大型数据文件处理方法

原创 2001年05月12日 04:45:00

      在Visual C++中,MFC(微软基础类库)提供了CFile和CStdioFile两个类来进行程序中的文件输入输出操作。Cfile类提供了基于二进制流的文件操作,功能类似于C语言中的fread()和fwrite()函数。CStdioFile提供了基于字符串流的文件操作,功能类似于C语言中的fgets()和fputs()函数。但是,使用这两个类进行文件操作时
,对于一次文件读写的数据量的大小必须限制在65535字节以内。其原因是在VC中访问大于65535字节的缓冲区需要Huge型指针,而在CFile和CStdioFile类中,使用的是Far型的指针。由于Far型指针不具有跨段寻址的能力,因此限制了一次文件读写的长度小于65535字节。如果传递给CFile和CStdioFile两个类的成员函数的数据缓冲区的大小大于65535字节的时候,VC就会产生ASSERT错误。
      笔者在使用Visual C++进行多媒体程序设计的时候,由于程序处理的数据量非常大,所以需要频繁地读写大于65535字节的数据。在使用CFile和CStdioFile类处理巨型数据的时候一般是分段读写,笔者感到这样的处理方法非常地繁琐,同时容易导致程序编制错误。笔者在查阅了相关的文献以后,找到了使用Visual C++直接读写巨型数据的方法。
      在MFC的CFile类中提供了两个未载入文档的函数,其原型声明在
AFX.H中。函数原型如下:
DWORD CFile::ReadHuge(void FAR *lpBuffer,DWORD dwCount);
void CFile::WriteHuge(const void FAR*lpBuffer,DWORD dwCount);
      在这两个函数内部使用的都是Huge型指针来对传递的缓冲区进行寻址,因此可以读写大于65535字节的巨型数据。对于ReadHuge()和WriteHuge()函数需要的巨型缓冲区可以使用Windows的API函数GobalAlloc()来创建。
     作为一个例子,下面的程序段演示了通过使用ReadHuge()和WriteHuge()函数使用一次读写复制一个大型文件的过程。

{ CString Namel(”data1.dat”);
         CString Name2(”data2.dat”);
         CFile MyFilel(Namel,CFile::modeRead);
         CFile MyFile2(Name2,CFile::modeCreate|CFile::mode
         Write);
         DWORD Length=MyFile1.GetLength();
         void far*p=GlobalAlloc(0,Length);
         if(p=NULL)
             {
                  AfxMessageBox(”Alloc memory error!”);
              }
         MyFile1.ReadHuge(p,Length);
         MyFile2.ReadHuge(p,Length);
         MyFile1.Close();
         MyFile2.Close();
         AfxMessageBox(”File Copy Succeed!”);

(作者:成都 卢军)

基于MFC的大型数据文件处理方法

在Visual C++中,MFC(微软基础类库)提供了CFile和CStdioFile两个类来进行程序中的文件输入输出操作。Cfile类提供了基于二进制流的文件操作,功能类似于C语言中的fread()...
  • guoduhua
  • guoduhua
  • 2013年04月15日 19:47
  • 698

MFC多线程-如何安全终止MFC多线程

终止线程  有两种情况可以使线程结束:控制函数结束或者根本就不允许线程完成,而提前终止它。我们可以想象在WORD中进行后台打印,如果打印结束了,那线程就可以结束了。如果用户中止了打印,那后台打印线程...
  • ndjk454164628
  • ndjk454164628
  • 2014年05月11日 09:57
  • 875

误删除数据文件-无归档处理方法

误删除数据文件实验(linux+10g) 1、新建表空间TEST、表T
  • u013820054
  • u013820054
  • 2014年09月05日 09:41
  • 419

VS2010/MFC编程入门之九(对话框:为控件添加消息处理函数)

本文转自鸡啄米:http://www.jizhuomi.com/software/156.html      感 谢鸡啄米对本文的贡献。    创建对话框类和添加控件变量在上一讲中已经讲过,这一...
  • my_lord_
  • my_lord_
  • 2016年08月12日 11:31
  • 1408

如何安全删除基于对话框的MFC中控件的事件处理程序

如上图,要删除的为“启动服务”按钮控件,其ID为 IDC_START,此控件已存在一个事件处理程序,先打算将其删除。 共需删除三个地方的代码。 第一,事件处理程序的原代码。 ...
  • lwqhuiji
  • lwqhuiji
  • 2015年10月28日 10:51
  • 1185

MFC的消息处理函数

转自:http://blog.163.com/chen_xinghuan/blog/static/172201582201151192943481/1.AfxWndProc() 该函数负责接收消息...
  • majinlei121
  • majinlei121
  • 2015年05月21日 08:36
  • 1674

OpenCV与MFC通用型图像处理开发实践

imagehandler   该程序的起源说来话长,它起源自上课的一次作业,后来又由于接触了OpenCV这个开源库,我就试图将OpenCV和MFC搓到一块,毕竟微软近来在界面上也下了狠功夫,尤其是Wi...
  • giantchen547792075
  • giantchen547792075
  • 2014年04月30日 23:15
  • 5761

数字图像处理MFC程序设计之图像的打开显示

最近想把以前做过的数字图像处理实习写成一个教程,用的是CBmpFile类,武汉大学遥感信息工程学院的学生也许都会用这个类来实现图像处理,废话就不多说了,直接开始吧。。。     一、图像的显示    ...
  • whustyle
  • whustyle
  • 2014年12月10日 22:11
  • 1037

mfc制作图像处理软件总结(一)

最近老师让做一个处理图像的小软件,用了大概一个星期做出来了成品,MFC上我算是新手,一路摸索过来也算是收获不少吧,现在软件也做完了,给自己总结一下在学习过程中的收获和不足。 首先放出一下软件的运行截图...
  • zzucode
  • zzucode
  • 2014年07月24日 14:34
  • 3453

MFC中如何添加消息响应函数

目前,用MFC设计的Windows应用程序几乎都采用文档/视图结构。这种程序框架与简单程序框架之间的重要区别就在于形成应用程序的主窗口不只需要一个类的对象,而是需要3个对象: 框架窗口类(C...
  • eddy_liu
  • eddy_liu
  • 2013年01月06日 21:45
  • 26753
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于MFC的大型数据文件处理方法
举报原因:
原因补充:

(最多只允许输入30个字)