基於MFC的大型資料檔案處理方法 (轉)
在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中。函式原型如下:
D CFile::ReadHuge(void FAR *lpBuffer,DWORD dwCount);
void CFile::WriteHuge(const void FAR*lpBuffer,DWORD dwCount);
在這兩個函式內部使用的都是Huge型指標來對傳遞的緩衝區進行定址,因此可以讀寫大於65535位元組的巨型資料。對於ReadHuge()和WriteHuge()函式需要的巨型緩衝區可以使用的函式GobalAlloc()來建立。
作為一個例子,下面的程式段演示了透過使用Read?Huge()和WriteHuge()函式使用一次讀寫複製一個大型檔案的過程。
{ CString Namel(”data1.dat”);
CString Name2(”data2.dat”);
CFile MyFilel(Namel,CFile::modeRead);
CFile MyFile2(Name2,CFile::modeCreate|CFile::mode
Write);
DWORD Length=MyFile1.GetLength();
void far*p=GlobalAlloc(0,Length);
if(p=NULL)
{
AfxMessageBox(”Alloc memory er?ror!”);
}
MyFile1.ReadHuge(p,Length);
MyFile2.ReadHuge(p,Length);
MyFile1.Close();
MyFile2.Close();
AfxMessageBox(”File Copy Suc?ceed!”);
}
(作者:成都 盧軍)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1004512/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 誤刪資料庫資料檔案的處理方法資料庫
- asm管理的dg資料檔案缺失的處理方法ASM
- 處理記憶體洩漏的一種MFC方法 (轉)記憶體
- UNIX的檔案處理(轉)
- 基於ORM思想的資料庫處理ORM資料庫
- FileSystemObject 的例子(處理驅動器、資料夾、檔案) (轉)Object
- 使用資料流的思想處理檔案
- 含有特殊字元的資料檔案處理字元
- 關於丟失表空間資料檔案的處理方式
- Oracle資料庫聯機日誌檔案丟失處理方法(總結)(轉)Oracle資料庫
- 關於applet寫入檔案的處理 (轉)APP
- 檔案系統被破壞時的處理方法(轉)
- oracle資料檔案被誤刪除後的災難處理方法Oracle
- 使用C#處理基於位元流的資料C#
- JMeter中對於Json資料的處理方法JMeterJSON
- 基於 RocketMQ Connect 構建資料流轉處理平臺MQ
- 表空間資料檔案故障處理
- 大型WAV檔案的播放 (轉)
- 控制檔案丟失處理方法
- 對於CSV檔案中{,}和{"}的處理
- Oracle 基於其他表中的資料更新記錄時空值的處理方法Oracle
- Linux檔案系統被破壞時的處理方法(轉)Linux
- Oracle資料庫聯機日誌檔案丟失處理方法(1)Oracle資料庫
- Oracle資料庫聯機日誌檔案丟失處理方法(3)Oracle資料庫
- Oracle資料庫聯機日誌檔案丟失處理方法(2)Oracle資料庫
- Oracle資料庫聯機日誌檔案丟失處理方法(4)Oracle資料庫
- Oracle資料庫聯機日誌檔案丟失處理方法(5)Oracle資料庫
- 基於Spark的大資料實時處理開課Spark大資料
- ORACLE 回滾段表空間資料檔案丟失或損壞處理方法(1) (轉)Oracle
- MFC: 檔案
- 處理檔名內含有特殊字元的檔案 (轉)字元
- UNDO表空間下的資料檔案被誤刪除後的處理方法
- 基於 Electron 的前端檔案處理工具前端
- 超大型的檔案資料如何傳輸?
- 基於python的大資料分析-資料處理(程式碼實戰)Python大資料
- Python處理CSV檔案的幾個方法Python
- 海量資料處理 (轉)
- [python] 基於Tablib庫處理表格資料Python