用于在OpenFileDialog中筛选文件的正则表达式

本文关键字:文件 正则表达式 筛选 OpenFileDialog 用于 | 更新日期: 2023-09-27 17:48:51

我想知道如何在打开的文件对话框中过滤文件(在winforms中)基于正则表达式。文件具有相同的扩展名(.xml)。大文件被拆分为多个同名文件,但仅用_1分隔。。。我们只想显示没有_1(第一个数据文件)的文件

"打开文件"对话框有一个属性过滤器,但我不知道如何在文件名格式中指定它,因此使用了正则表达式。

Thankx,Niki

用于在OpenFileDialog中筛选文件的正则表达式

我认为您不能用OpenFileDialog的Filter属性来实现这一点,它只是根据扩展名过滤文件列表。

我认为您必须让用户选择一个xml文件,进行验证,然后再次弹出对话框(如果是_1文件)。您可以订阅FileOK事件并在其中插入此验证。您可以在此处使用正则表达式验证文件名。这是能做的最好的事情。。我想。

本文中描述的OpenFileDialogEx是标准OpenFileDialog的扩展。该扩展的主要目的是修改对话框的显示,但还有一些额外的提示。例如,OFEx添加了一些事件,如文件更改、文件夹更改等。

有人指出,CDN_INCLUDEITEM通知似乎可以满足过滤对话框中显示的文件列表的愿望,。看起来会的,但事实并非如此。CDN_INCLUDEITEM不会执行您可能认为或想要的操作。

根据MSDN Mag的这篇文章,

如果使用创建对话框OFN_ENABLEINCLUDENOTIFY,Windows发送您的挂钩过程为CDN_INCLUDEITEM它添加到的每个项目的通知打开的列表。如果返回FALSE,Windows排除该项目问题是,Windows不会通知您普通文件,仅伪对象比如命名空间扩展当你通过放大镜,打印非常清楚:"对话框始终包括同时具有SFGAO_文件系统和SFGAO_FILESYSANCESTOR属性,不管返回的值是多少CDN_INCLUDEITEM。"显然Redmondtonians添加了CDN_INCLUDEITEM为了他们自己的目的包括过滤普通文件名。

换句话说,在响应CDN_INCLUDEITEM时,不能为常规文件返回FALSE以将它们从对话框中排除。与文档中所说的,对于常规文件,CDN_INCLUDEITEM的响应被忽略相反,根据我的经验,CDN_INCLUDEITEM甚至对于常规文件都没有发送,至少在我的Vista机器上没有。

那么,是否可以动态排除文件?嗯,是的,在C++中;响应CDN_FOLDERCHANGED消息,您可以获取并设置包含文件的CListCtrl的内容。我还没想好如何在C#中设置这个列表。

OpenFileDialog不支持此功能。另一种选择是使用像FileView这样的第三方控件,它允许您使用任何想要的条件(如正则表达式)来筛选项目。

您应该能够使用以下过滤器来完成此操作:数据文件|*_1.xml

我不知道如何用WinForms在C#中实现,但在C++中,您要做的是安装一个自定义挂钩过程并侦听CDN_INCLUDEITEM通知。然后,根据正则表达式检查每个文件名。看见http://msdn.microsoft.com/en-us/library/ms646960(VS.85).aspx#_win32.Filters.