使用内存映射文件时,它似乎是只读的或只写的。我的意思是你不能:
- 有一个可以写,后来决定不保存
- 已打开阅读,后来决定保存
我们的应用程序使用一个可写的内存映射文件来保存数据文件,但是由于用户可能想退出而不保存更改,我们必须使用用户实际编辑的临时文件。当用户选择保存更改时,原始文件将被临时文件覆盖,因此它具有最新的更改。这很麻烦,因为文件可能非常大(> 1GB)并且复制它们需要很长时间。
我尝试了许多用于创建文件映射的标志组合,但似乎没有一个允许按需保存的灵活性。任何人都可以确认是这种情况吗?我们的应用程序是用 Delphi 编写的,但它使用标准的 Windows API 来创建映射,在我们的例子中
FMapHandle := CreateFileMapping(FFileHandle, nil, PAGE_READWRITE, 0, 2 * 65536, nil);
FBasePointer := MapViewOfFile(FileMapHandle, FILE_MAP_WRITE, FileOffsetHigh,
FileOffsetLow, NumBytes);