VC 中使用記憶體對映檔案處理大檔案

2021-04-12 23:50:47 字數 1443 閱讀 3492

vc++中使用記憶體對映檔案處理大檔案

摘要:本文給出了一種方便實用的解決大檔案的讀取、儲存等處理的方法,並結合相關程式**對具體的實現過程進行了介紹。

引言

檔案操作是應用程式最為基本的功能之一,win32 api和mfc均提供有支援檔案處理的函式和類,常用的有win32 api的createfile()、writefile()、readfile()和mfc提供的cfile類等。一般來說,以上這些函式可以滿足大多數場合的要求,但是對於某些特殊應用領域所需要的動輒幾十gb、幾百gb、乃至幾tb的海量儲存,再以通常的檔案處理方法進行處理顯然是行不通的。目前,對於上述這種大檔案的操作一般是以記憶體對映檔案的方式來加以處理的,本文下面將針對這種windows核心程式設計技術展開討論。

記憶體對映檔案

在使用記憶體對映檔案時,所使用的api函式主要就是前面提到過的那幾個函式,下面分別對其進行介紹:

handle createfile(lpctstr lpfilename,

dword dwdesiredaccess,

dword dwsharemode,

lpsecurity_attributes lpsecurityattributes,

dword dwcreationdisposition,

dword dwflagsandattributes,

handle htemplatefile);

引數dwnumberofbytestomap指定了資料檔案的對映長度,這裡需要特別指出的是,對於windows 9x作業系統,如果mapviewoffile()無法找到足夠大的區域來存放整個檔案對映物件,將返回空值(null);但是在windows 2000下,mapviewoffile()只需要為必要的檢視找到足夠大的乙個區域即可,而無須考慮整個檔案對映物件的大小。

在完成對對映到程序位址空間區域的檔案處理後,需要通過函式unmapviewoffile()完成對檔案資料映像的釋放,該函式原型宣告如下:

bool unmapviewoffile(lpcvoid lpbaseaddress);

使用記憶體對映檔案處理大檔案應用示例

結論

經實際測試,記憶體對映檔案在處理大資料量檔案時表現出了良好的效能,比通常使用cfile類和readfile()和writefile()等函式的檔案處理方式具有明顯的優勢。本文所述**在windows 98下由microsoft visual c++ 6.0編譯通過。

VC 中使用記憶體對映檔案處理大檔案

檔案操作是應用程式最為基本的功能之一,win32 api和mfc均提供有支援檔案處理的函式和類,常用的有win32 api的createfile writefile readfile 和mfc提供的cfile類等。一般來說,以上這些函式可以滿足大多數場合的要求,但是對於某些特殊應用領域所需要的動輒幾...

VC 中使用記憶體對映檔案處理大檔案

引言 檔案操作是應用程式最為基本的功能之一,win32 api和mfc均提供有支援檔案處理的函式和類,常用的有win32 api的createfile writefile readfile 和mfc提供的cfile類等。一般來說,以上這些函式可以滿足大多數場合的要求,但是對於某些特殊應用領域所需要的...

VC 中使用記憶體對映檔案處理大檔案

先貼 include stdafx.h include windows.h include iostream using namespace std string getvalue const char lpbmapaddress,const char sname intmain 得到檔案尺寸 dw...