带有OFN_OVERWRITEPROMPT的Windows SaveAs dlg无法检测文件删除?

时间:2013-07-05 13:13:36

标签: winapi prompt overwrite savefiledialog

我正在使用一个非常常见的SaveAs对话框(在Delphi Win32 XE2中,系统是Win 7/64),设置OFN_OVERWRITEPROMPT(或Delphi包装器的等效dlgSave.Options := [ofPathMustExist, ofOverwritePrompt];。所以,如果我选择一个现有文件,对话框要求确认覆盖该文件。

除了一个愚蠢的事情之外,一切都正常:当我选择一个文件,然后在同一个对话框中删除该文件,然后按OK,对话框仍然会询问是否可以覆盖(已删除的)文件。显然,对话框根据预加载的列表而不是文件系统检查文件是否存在。问题不是特定于Delphi,即使在记事本中也很容易显示:

  • 运行Notepad.exe
  • 输入一些文字
  • 另存为文件
  • 再次单击文件另存为,在SaveAs对话框中执行:
    • 单击同一文件以选择它,
    • 右键单击并删除文件
    • 点击“确定”。

该文件不再存在,但您仍然会收到覆盖提示。

任何人都可以建议一种方法来解决这个轻微但烦人的Windows错误吗?我假设可能需要一些消息处理/回调/挂钩?在模态SaveAs对话框打开时检查代码中文件是否存在的方法?

0 个答案:

没有答案