在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 dwCo
unt);
void CFile