📄 基于MFC大型数据处理方法.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0046)http://www.vcfan.com/vc/example/0602/60212.htm -->
<HTML><HEAD><TITLE>程序家园--vc编程--程序示例</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<STYLE type=text/css>TD {
FONT-SIZE: 9pt
}
A:hover {
FONT-SIZE: 9pt; COLOR: #33ff33
}
</STYLE>
<META content="MSHTML 6.00.2800.1106" name=GENERATOR></HEAD>
<BODY background="" onload=showtime(0)>
<TABLE height=784 cellSpacing=0 cellPadding=0 width=633 border=0>
<TBODY>
<TR>
<TD width=17 height=48> </TD>
<TD width=709 height=48>
<TABLE height=50 cellSpacing=0 cellPadding=0 width=470 align=center
border=0>
<TBODY>
<TR>
<TD width=124 height=53>
<P><FONT color=#0000ff>程序家园-vc编程技巧</FONT></P>
<P>
<SCRIPT language=JavaScript>
today=new Date();
function initArray(){
this.length=initArray.arguments.length
for(var i=0;i<this.length;i++)
this[i+1]=initArray.arguments[i] }
var d=new initArray(
"星期日",
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六");
document.write(
"<font color=##0000FF style='font-size:9pt;font-family: 宋体'> ",
today.getYear(),"年",
today.getMonth()+1,"月",
today.getDate(),"日 ",
d[today.getDay()+1],
"</font>" );
</SCRIPT>
</P></TD>
<TD width=183 height=53>
<DIV align=center><IMG height=30 src="基于MFC大型数据处理方法.files/pjqsl.jpg"
width=150></DIV></TD>
<TD width=153 height=53>
<FORM name=clock>
<P><FONT color=#0000ff>你在本页时间</FONT> <INPUT
style="FONT-SIZE: 9pt; COLOR: #0000ff" size=7 name=face>
<SCRIPT language=JavaScript>
var timerID=null
function showtime(seed){
if (seed>=0){
seed++;
mod=seed%3600;
hours=(seed-mod)/3600
seconds=mod%60
minutes=(seed-3600*hours-seconds)/60;
var timeValue=""+((hours < 10)?"0":"")+hours
timeValue+=((minutes < 10)?":0":":")+minutes
timeValue+=((seconds < 10)?":0":":")+seconds
document.clock.face.value=timeValue;
var cmd="showtime("+seed+")";
timeID=window.setTimeout(cmd,1000); }}
</SCRIPT>
</P></FORM></TD></TR></TBODY></TABLE></TD>
<TD width=11 height=48> </TD></TR>
<TR>
<TD width=17 height=650> </TD>
<TD width=709 height=650>
<TABLE borderColor=#ffcc99 height=650 cellSpacing=0 cellPadding=0
width=535 align=center border=1>
<TBODY>
<TR>
<TD height=11>
<BLOCKQUOTE>
<DIV align=center>
<P>基于MFC的大型数据文件处理方法 </P></DIV></BLOCKQUOTE></TD></TR>
<TR>
<TD>
<P><BR>在Visual
C++中,MFC(微软基础类库)提供了CFile和CStdio<BR>File两个类来进行程序中的文件输入输出操作。Cfile类提供了基于二<BR>进制流的文件操作,功能类似于C语言中的fread()和fwrite()函<BR>数。CStdioFile提供了基于字符串流的文件操作,功能类似于C语言中<BR>的fgets()和fputs()函数。但是,使用这两个类进行文件操作时<BR>,对于一次文件读写的数据量的大小必须限制在65535字节以内。其原<BR>因是在VC中访问大于65535字节的缓冲区需要Huge型指针,而在CFile<BR>和CStdioFile类中,使用的是Far型的指针。由于Far型指针不具有跨<BR>段寻址的能力,因此限制了一次文件读写的长度小于65535字节。如果<BR>传递给CFile和CStdioFile两个类的成员函数的数据缓冲区的大小大于<BR>65535字节的时候,VC就会产生ASSERT错误。<BR>笔者在使用Visual
C++进行多媒体程序设计的时候,由于程序<BR>处理的数据量非常大,所以需要频繁地读写大于65535字节的数据。在<BR>使用CFile和CStdioFile类处理巨型数据的时候一般是分段读写,笔者<BR>感到这样的处理方法非常地繁琐,同时容易导致程序编制错误。笔者<BR>在查阅了相关的文献以后,找到了使用Visual
C++直接读写巨型数<BR>据的方法。<BR>在MFC的CFile类中提供了两个未载入文档的函数,其原型声明在<BR>AFX.H中。函数原型如下:<BR>DWORD
CFile::ReadHuge(void FAR *lpBuffer,DWORD dwCo<BR>unt);<BR>void
CFile::WriteHuge(const void FAR*lpBuffer,DWORD
<BR>dwCount);<BR>在这两个函数内部使用的都是Huge型指针来对传递的缓冲区进行<BR>寻址,因此可以读写大于65535字节的巨型数据。<BR>对于ReadHuge()和WriteHuge()函数需要的巨型缓冲区可以使<BR>用Windows的API函数GobalAlloc()来创建。<BR>作为一个例子,下面的程序段演示了通过使用Read
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -