?? 基于MFC大型數(shù)據(jù)處理方法.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大型數(shù)據(jù)處理方法.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的大型數(shù)據(jù)文件處理方法 </P></DIV></BLOCKQUOTE></TD></TR>
<TR>
<TD>
<P><BR>在Visual
C++中,MFC(微軟基礎(chǔ)類庫)提供了CFile和CStdio<BR>File兩個類來進行程序中的文件輸入輸出操作。Cfile類提供了基于二<BR>進制流的文件操作,功能類似于C語言中的fread()和fwrite()函<BR>數(shù)。CStdioFile提供了基于字符串流的文件操作,功能類似于C語言中<BR>的fgets()和fputs()函數(shù)。但是,使用這兩個類進行文件操作時<BR>,對于一次文件讀寫的數(shù)據(jù)量的大小必須限制在65535字節(jié)以內(nèi)。其原<BR>因是在VC中訪問大于65535字節(jié)的緩沖區(qū)需要Huge型指針,而在CFile<BR>和CStdioFile類中,使用的是Far型的指針。由于Far型指針不具有跨<BR>段尋址的能力,因此限制了一次文件讀寫的長度小于65535字節(jié)。如果<BR>傳遞給CFile和CStdioFile兩個類的成員函數(shù)的數(shù)據(jù)緩沖區(qū)的大小大于<BR>65535字節(jié)的時候,VC就會產(chǎn)生ASSERT錯誤。<BR>筆者在使用Visual
C++進行多媒體程序設(shè)計的時候,由于程序<BR>處理的數(shù)據(jù)量非常大,所以需要頻繁地讀寫大于65535字節(jié)的數(shù)據(jù)。在<BR>使用CFile和CStdioFile類處理巨型數(shù)據(jù)的時候一般是分段讀寫,筆者<BR>感到這樣的處理方法非常地繁瑣,同時容易導(dǎo)致程序編制錯誤。筆者<BR>在查閱了相關(guān)的文獻以后,找到了使用Visual
C++直接讀寫巨型數(shù)<BR>據(jù)的方法。<BR>在MFC的CFile類中提供了兩個未載入文檔的函數(shù),其原型聲明在<BR>AFX.H中。函數(shù)原型如下:<BR>DWORD
CFile::ReadHuge(void FAR *lpBuffer,DWORD dwCo<BR>unt);<BR>void
CFile::WriteHuge(const void FAR*lpBuffer,DWORD
<BR>dwCount);<BR>在這兩個函數(shù)內(nèi)部使用的都是Huge型指針來對傳遞的緩沖區(qū)進行<BR>尋址,因此可以讀寫大于65535字節(jié)的巨型數(shù)據(jù)。<BR>對于ReadHuge()和WriteHuge()函數(shù)需要的巨型緩沖區(qū)可以使<BR>用Windows的API函數(shù)GobalAlloc()來創(chuàng)建。<BR>作為一個例子,下面的程序段演示了通過使用Read
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -