防止 Windows' 打开文件对话框检查读取权限

Prevent Windows' open file dialog from checking read permission

我正在使用 MFC 的 CFileDialog select 文件。我只对完整的文件路径感兴趣,因为我的应用程序不会直接打开它。虽然文件对话框通过声明拒绝 selecting 文件:"You don't have read permission to open this file"。 (正确 -- 我没有读取权限;我不想打开该文件。)

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

这是我的代码:

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

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

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

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

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

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

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

dlg.m_ofn.lpstrTitle = "Select file";