Winapi 阻止Windows的“打开文件”对话框检查读取权限

Winapi 阻止Windows的“打开文件”对话框检查读取权限,winapi,mfc,openfiledialog,Winapi,Mfc,Openfiledialog,我正在使用MFC的CFileDialog选择一个文件。我只对完整的文件路径感兴趣,因为我的应用程序不会直接打开它。尽管文件对话框通过声明:您没有打开此文件的读取权限来拒绝选择该文件。这是正确的-我没有阅读许可;我不想打开这个文件 那么,在Windows下有没有一种方法可以通过使用文件对话框来访问路径 这是我的密码: CFileDialog dlg(true, nullptr, nullptr, OFN_FILEMUSTEXIST, nullptr, nullptr, 0, true); dlg.

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

那么,在Windows下有没有一种方法可以通过使用文件对话框来访问路径

这是我的密码:

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

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

如果您没有打开文件的读取权限,则此操作将失败


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

我发现了一个解决方法,即滥用“保存文件”对话框,该对话框不检查您是否具有文件的读/写权限:

CFileDialog dlgfalse,nullptr,nullptr,of n_FILEMUSTEXIST,nullptr,nullptr,0,true

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


dlg.m_of n.lpstrtite=选择文件

我认为这不应该发生,除非设置OFN_NOREADONLYRETURN。显示用于CFileDialog的代码。@BarmakShemirani否,OFN_NOREADONLYRETURN未设置。我刚刚用示例代码更新了我的帖子。请尝试添加OFN_READONLY@HansPassantOFN_READONLY没有帮助。我既不想写,也不想读这个文件。我根本不想打开它!您是否尝试从CFileDialog继承并重写虚拟BOOL OnFileNameOK;?省略n_FILEMUSTEXIST不会产生另一个结果-我仍然会收到关于缺少读取该文件的权限的提示。