При использовании файлов с отображением в памяти кажется, что они доступны только для чтения или только для записи. Под этим я подразумеваю, что вы не можете:
- have one open for writing, and later decide not to save it
- have open open for reading, and later decide to save it
Наше приложение использует доступный для записи отображаемый в память файл для сохранения файлов данных, но, поскольку пользователь может захотеть выйти без сохранения изменений, мы должны использовать временный файл, который пользователь фактически редактирует. Когда пользователь решает сохранить изменения, исходный файл перезаписывается временным файлом, поэтому он содержит последние изменения. Это обременительно, потому что файлы могут быть очень большими (> 1 ГБ) и их копирование занимает много времени.
Я пробовал много комбинаций флагов, используемых для создания сопоставления файлов, но ни одна из них, похоже, не обеспечивает гибкости сохранения по требованию. Кто-нибудь может подтвердить, что это так? Наше приложение написано на Delphi, но в нашем случае оно использует стандартный Windows API для создания сопоставления.
FMapHandle := CreateFileMapping(FFileHandle, nil, PAGE_READWRITE, 0, 2 * 65536, nil);
FBasePointer := MapViewOfFile(FileMapHandle, FILE_MAP_WRITE, FileOffsetHigh,
FileOffsetLow, NumBytes);