如何在 MFC 中使用 CfileDialog 选择特定文件

Posted

技术标签:

【中文标题】如何在 MFC 中使用 CfileDialog 选择特定文件【英文标题】:How to select specific file using CfileDialog in MFC 【发布时间】:2015-02-26 07:05:58 【问题描述】:

我想打开一个文件对话框并允许用户只选择名称为“myapplication.ini”的文件,用户只能浏览文件夹以检查文件是否存在以选择它。

所以我遇到了 CFileDialog,除了将其限制为仅显示名称为“myapplication.ini”的文件之外,它几乎可以执行我想要的操作

目前我对 CFiledialog 的使用

CFileDialog FileDialog(TRUE,"features.ini", NULL,OFN_HIDEREADONLY,NULL);

我不确定应该进行哪些更改才能使其按预期工作。

【问题讨论】:

【参考方案1】:

这听起来像是一个糟糕的用户界面。即使您过滤掉除该文件之外的所有文件,用户也可以覆盖过滤器。如果您不允许用户选择文件名,为什么要让他们选择?

在我看来,您实际上是在要求用户选择一个文件夹。因此,而不是文件对话框,向他们显示文件夹选择对话框,CFolderPickerDialog

【讨论】:

最终用户必须从他的位置选择文件,我的应用程序将只接受特定文件名。所以我不得不限制它。 我完全理解。所以要求用户选择位置而不是文件。使用文件夹选择对话框而不是文件选择对话框。 是的,这也是我的首选解决方案,@David 绝对正确,文件对话框是错误的方法。 +1。 但从用户的角度来看,最好知道特定文件是否在所述文件夹中。【参考方案2】:

像这样声明过滤器字符串:

static TCHAR BASED_CODE szFilter[] = _T("features.ini (features.ini)|features.ini|");

然后将其传递给您的CFileDialog ctor:

CFileDialog FileDialog(TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter);

【讨论】:

在我将 szFilter 参数更改为正确参数后它起作用了,编辑了你的答案。谢谢 用户在文件名编辑框中输入*,回车,所有文件都显示出来了。 您可以通过从 CFileDialog 派生并使用以下代码覆盖 OnInitDone 方法来解决该问题:CWnd* dlgitm = GetParent()->GetDlgItem(edt1); dlgitm->EnableWindow(FALSE);这将禁用文本框文本的编辑。干杯队友 你可以这样做,但它不会让用户感到困惑吗?我知道我会被提供一个带有编辑框的文件对话框感到困惑,但后来发现编辑框被禁用了。

以上是关于如何在 MFC 中使用 CfileDialog 选择特定文件的主要内容,如果未能解决你的问题,请参考以下文章

MFC中CFileDialog使用方法

如何让CFileDialog同时选择文件和文件夹

MFC CFileDialog 只打开选择文件

在 CFileDialog (MFC) 中设置文件夹视图

mfc CFileDialog类

MFC中文件对话框类CFileDialog详解及文件过滤器说明