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