基於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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用資料流的思想處理檔案
- 關於丟失表空間資料檔案的處理方式
- 基於 RocketMQ Connect 構建資料流轉處理平臺MQ
- MFC: 檔案
- Python處理CSV檔案的幾個方法Python
- [python] 基於Tablib庫處理表格資料Python
- 資料匯入與預處理實驗二---json格式檔案轉換JSON
- Java大型資料集合實現並行加速處理幾種方法 - DZoneJava並行
- 基於python的大資料分析-資料處理(程式碼實戰)Python大資料
- 超大型的檔案資料如何傳輸?
- bat批處理轉換成exe檔案BAT
- 資料處理及跳轉
- 技術分享 | OceanBase 資料處理之控制檔案
- [影像處理] 基於CleanVision庫清洗影像資料集
- 被誤刪的檔案正確處理方法,快速找回誤刪的檔案
- 影像資料不足時的處理方法
- 處理恢復資料方法
- 【ASM】ASM資料檔案和OS檔案(FILESYSTEM)轉移方法總結ASM
- 基於Greenplum,postgreSQL的大型資料倉儲實踐SQL
- 【Python基礎】Python處理Excel檔案,進行篩選資料、排序等操作及儲存新的Excel檔案PythonExcel排序
- Python如何處理檔案的?Python
- [資料處理]python基礎Python
- 反映在基於資料感知的智慧資料預處理和智慧排程
- python 檔案處理Python
- python處理檔案Python
- python檔案處理Python
- SpringMVC:資料處理及跳轉SpringMVC
- 小程式處理大量資料列表的方法
- 基於Docker部署Oracle、MySQL等資料庫的資料檔案持久化DockerOracleMySql資料庫持久化
- Excel檔案 利用MySQL/Python 實現自動處理資料的功能ExcelMySqlPython
- 資料預處理方法彙總
- 利用 python 遍歷多級資料夾處理不同檔案Python
- Pandas 基礎 (5) - 處理缺失的資料
- 關於一類資料處理
- 關於SQL Serve資料庫r帳號被禁用的處理方法SQL資料庫
- Java使用xlsx-streamer和EasyExcel解決讀取超大excel檔案資料處理方法JavaExcel
- Hadoop小檔案的處理方式Hadoop
- sklearn基礎及資料處理
- python處理txt檔案Python