在Delphi 7中,我用CreateFileMapping打開一個文件,然後使用MapViewOfFile獲取一個指針。如何擴展內存映射文件的長度?
如何擴展內存並將一些字符添加到內存並將其保存到該文件?
我已經用適當的模式(fmOpenReadWrite,PAGE_READWRITE), 打開文件,如果我覆蓋字符,它會被保存到文件中,但我需要在文件的中間添加額外的值。
在Delphi 7中,我用CreateFileMapping打開一個文件,然後使用MapViewOfFile獲取一個指針。如何擴展內存映射文件的長度?
如何擴展內存並將一些字符添加到內存並將其保存到該文件?
我已經用適當的模式(fmOpenReadWrite,PAGE_READWRITE), 打開文件,如果我覆蓋字符,它會被保存到文件中,但我需要在文件的中間添加額外的值。
如果文件映射是由實際的文件,而不是一個內存塊的支持,那麼您可以在以下兩種方式之一調整文件。該文件將被調整大小以匹配新的映射。
2)使用SetFilePointer()
和SetEndOfFile()
直接調整文件大小,然後用新大小調用CreateFileMapping()
。
這兩個條件都在CreateFileMapping()
的文檔中描述。
當您創建文件時,您無法調整使用CreateFileMapping
創建的文件映射。請參閱前面對該主題的討論:Windows: Resize shared memory。
1)調用CreateFileMapping()
,其大小超過當前文件大小:
好吧,我假設我可以從打開的視圖創建一個新文件。還有一個問題,我如何檢查進程地址空間多長時間,以確保我可以映射整個文件? – John
它不完全是文件,它是基本上共享內存映射到進程地址空間的「文件映射」。你的選擇是關閉/銷燬現有的文件映射並創建一個新的替換文件,或者創建一個額外的文件映射,並以某種方式鏈接這兩者。可以使用MapViewOfFileEx來映射兩個映射以產生連續的地址空間,但不建議這樣做。 –
那麼,如果我有一個在內存中的文件的完整內容的視圖,我可以使用該指針將其寫入到一個普通的德爾福流保存文件的一些變化,對吧?你能否回答我的問題?如何確定進程地址空間的長度?謝謝 – John