私は完全に通常の名前を付けて保存ダイアログを使用しています (Delphi Win32 XE2 では、システムは Win 7 /64 です)、OFN_OVERWRITEPROMPT (または Delphi ラッパーの同等のもの) を設定しますdlgSave.Options := [ofPathMustExist, ofOverwritePrompt];
。したがって、既存のファイルを選択すると、ダイアログはファイルを上書きする確認を求めます。 .
ファイルを選択し、同じダイアログでそのファイルを削除し、[OK] を押すと、ダイアログは (既に削除された) ファイルを上書きしてもよいかどうかを尋ねます。どうやら、ダイアログはファイルシステムではなく、事前にロードされたリストに対してファイルの存在をチェックします。この問題は Delphi に固有のものではなく、メモ帳でも非常に簡単に表示できます。
- Notepad.exe を実行します。
- テキストを入力してください
- ファイルとして保存
- [ファイル] [名前を付けて保存] を再度クリックし、[名前を付けて保存] ダイアログで次の操作を行います。
- 同じファイルをクリックして選択し、
- ファイルを右クリックして削除し、
- [OK] をクリックします。
ファイルはもう存在しませんが、上書きプロンプトが引き続き表示されます。
このマイナーだが迷惑な Windows のバグを回避する方法を誰か提案してもらえますか? メッセージ処理/コールバック/フックが必要になると思いますか? モーダル SaveAs ダイアログが開いている間にコード内のファイルの存在を確認する方法は?