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