可能重复:
如何动态扩展内存映射文件
嗨,我有一个树状数据结构存储在 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);
}
这行得通吗?我对此有点内疚,因为我只是打开并重新映射文件并没有刷新它。我还需要冲洗它并进行任何其他操作吗?