メモリマップトファイルを使用する場合、読み取り専用または書き込み専用のいずれかであるように見えます。これは、あなたができないことを意味します:
- 1つを書き込み用に開いて、後でそれを保存しないことを決定します
- 読んで開いて、後でそれを保存することにしました
このアプリケーションは、書き込み可能なメモリマップファイルを使用してデータファイルを保存しますが、ユーザーは変更を保存せずに終了したい場合があるため、ユーザーが実際に編集する一時ファイルを使用する必要があります。ユーザーが変更を保存することを選択すると、元のファイルが一時ファイルで上書きされるため、最新の変更が適用されます。ファイルが非常に大きくなる可能性があり(> 1GB)、ファイルのコピーに長い時間がかかるため、これは面倒です。
ファイルマッピングの作成に使用されるフラグの多くの組み合わせを試しましたが、オンデマンドで保存する柔軟性を可能にするものはないようです。誰かがこれが事実であることを確認できますか?このアプリケーションはDelphiで記述されていますが、この場合、標準のWindowsAPIを使用してマッピングを作成します。
FMapHandle := CreateFileMapping(FFileHandle, nil, PAGE_READWRITE, 0, 2 * 65536, nil);
FBasePointer := MapViewOfFile(FileMapHandle, FILE_MAP_WRITE, FileOffsetHigh,
FileOffsetLow, NumBytes);