檔案動態增長

2022-02-03 02:44:55 字數 904 閱讀 1864

在看《windows核心程式設計》時,看到記憶體對映檔案一章節,書中提到錄音檔案動態增長,作者也留下了連線關於他實現的「可增長的記憶體對映檔案」的方法,我沒找到,於是自己就試著寫了乙個,源**貼出來,以供日後參考

void

increasefile()

unsigned

int tincreasesize = 0

; dword tfilesize = 0

;

const

char* const pstr = "

abcdefghijklmnopqrstuvwxyz";

while (true

)

tfilesize =getfilesize(hfile, null);

hfile, null, page_readwrite,

0, tfilesize + tincreasesize, l""

);

//將檔案對映到記憶體的位址空間,就可以操作這個記憶體對映檔案了

//比如錄音檔案

//建立1k大小的檔案,寫記憶體對映檔案,滿了,用此檔案再重建記憶體對映檔案,將大小擴大1k,將指標移動至原檔案的大小處,寫新申請1k空間

//這樣就可以實現不斷的增長的記憶體對映檔案

lpvoid pviewfile =mapviewoffile(

0,0,0

);

if (null ==pviewfile)

//寫資料

strcpy((char*)pviewfile +tfilesize, pstr);

unmapviewoffile(pviewfile);

}closehandle(hfile);

}

陣列空間的動態增長

寫 的時候常常會遇到陣列空間不確定的情況,如果預先用陣列定義,那麼需要分配足夠大的空間以防不夠用,這樣就很可能造成空間的浪費。因此利用vector存放陣列,分兩種情況 1.陣列個數採用輸入的形式 include using namespace std intmain for int i 0 i n ...

日誌檔案不斷增長

原文 日誌檔案不斷增長 sqlserver定時執行 checkpoint 保證 髒頁 被寫入硬碟。沒做checkpoint的,可能是只在記憶體中修改,資料檔案還沒同步。sqlserver要在硬碟的日誌檔案中有記錄,一邊異常重啟後重新修改。所有日誌都有嚴格順序,不能有跳躍。如果恢復模式不是簡單模式,那...

日誌檔案不斷增長

sqlserver定時執行 checkpoint 保證 髒頁 被寫入硬碟。沒做checkpoint的,可能是只在記憶體中修改,資料檔案還沒同步。sqlserver要在硬碟的日誌檔案中有記錄,一邊異常重啟後重新修改。所有日誌都有嚴格順序,不能有跳躍。如果恢復模式不是簡單模式,那麼sqlserver會認...