【问题标题】:Prevent Windows' open file dialog from checking read permission阻止 Windows 的打开文件对话框检查读取权限
【发布时间】:2015-07-22 07:02:30
【问题描述】:

我正在使用 MFC 的 CFileDialog 来选择一个文件。我只对完整的文件路径感兴趣,因为我的应用程序不会直接打开它。尽管文件对话框通过声明拒绝选择文件:“您没有打开此文件的读取权限”。 (这是正确的——我没有读取权限;我不想打开文件。)

那么,在 Windows 下有没有办法通过文件对话框来获取路径?

这是我的代码:

CFileDialog dlg(true, nullptr, nullptr, OFN_FILEMUSTEXIST, nullptr, nullptr, 0, true);
dlg.DoModal();

【问题讨论】:

  • 我认为除非设置了OFN_NOREADONLYRETURN,否则不应该发生这种情况。显示您用于CFileDialog 的代码。
  • @BarmakShemirani 否,OFN_NOREADONLYRETURN 未设置。我刚刚用示例代码更新了我的帖子。
  • 尝试添加 OFN_READONLY
  • @HansPassant OFN_READONLY 没有帮助。我既不想写,也不想读文件。我根本不想打开它!
  • 您是否尝试从 CFileDialog 继承并覆盖 virtual BOOL OnFileNameOK( );

标签: winapi mfc openfiledialog


【解决方案1】:

我通过(ab)使用保存文件对话框找到了一种解决方法,该对话框不检查您是否具有文件的读/写权限:

CFileDialog dlg(false, nullptr, nullptr, OFN_FILEMUSTEXIST, nullptr, nullptr, 0, true)

可能需要更改对话框的标题,因为应用程序不会将任何内容保存到所选文件:

dlg.m_ofn.lpstrTitle = "Select file";

【讨论】:

    【解决方案2】:

    文件打开对话框通过尝试打开文件来实现OFN_FILEMUSTEXIST

    如果您没有打开文件的读取权限,则会失败。

    解决方案是不使用OFN_FILEMUSTEXIST 标志,并在需要时执行您自己的检查(您可以在对话框关闭后执行此操作,或者在它关闭之前使用挂钩执行此操作)。

    【讨论】:

    • 省略 OFN_FILEMUSTEXIST 不会产生另一个结果 - 我仍然收到有关缺少读取文件权限的提示。
    猜你喜欢
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 2013-09-15
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    相关资源
    最近更新 更多