重複の可能性:
メモリ マップト ファイルを動的に拡張する方法
こんにちは、私は Windows のメモリ マップト ファイルに格納されているツリー状のデータ構造を持っています。レコードを挿入する必要があるときは、空きポインタがファイルの終わりに近いかどうかを確認しています。しかし、本当の問題はファイルのサイズを変更することです。
Windows のドキュメントでは、`CreateFileMapping' はそのパラメータに従ってファイルのサイズを変更すると書かれています。というわけで以下のように使うことにしました。
#define SEC_IMAGE_NO_EXECUTE 0x11000000
static void resize_file(wchar_t * file_name,int size)
{
hFile = CreateFile(file_name,GENERIC_READ|GENERIC_WRITE,0,\
NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,\
NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
MessageBox(NULL,L"resize_file CreateFile have been failed", szAppName,MB_OK);
exit(0);
}
// open file mapping object //
HANDLE hMap = CreateFileMapping(hFile,NULL,PAGE_EXECUTE_READWRITE|SEC_IMAGE_NO_EXECUTE,0,size,NULL);
// Close files and mapping //
CloseHandle(hMap);
CloseHandle(hFile);
}
これは機能しますか?ファイルを開いて再マップしただけで、フラッシュしなかったため、これについて少し罪悪感があります。それをフラッシュして、他の操作も行う必要がありますか?