?? 基于mfc的大型數據文件處理方法.txt
字號:
作者:SKYHORSEBJ
email: XUEY@CIDC.COM.CN
日期:2001-7-4 17:30:36
在Visual C++中,MFC(微軟基礎類庫)提供了CFile和CStdio
File兩個類來進行程序中的文件輸入輸出操作。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 dwCo
unt);
void CFile::WriteHuge(const void FAR*lpBuffer,DWORD
dwCount);
在這兩個函數內部使用的都是Huge型指針來對傳遞的緩沖區進行
尋址,因此可以讀寫大于65535字節的巨型數據。
對于ReadHuge()和WriteHuge()函數需要的巨型緩沖區可以使
用Windows的API函數GobalAlloc()來創建。
作為一個例子,下面的程序段演示了通過使用Read
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -