正则表达式,用于过滤OpenFileDialog中的文件

时间:2008-09-29 13:29:28

标签: c# regex winforms

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

打开文件对话框有一个属性过滤器,但我不知道如何以我们的文件名格式指定它,因此是正则表达式。

Thankx, 尼基

5 个答案:

答案 0 :(得分:3)

使用OpenFileDialog的Filter属性

我认为你不能这样做,它只是根据扩展名过滤文件列表。

我认为你必须让用户选择一个xml文件,验证然后再次弹出对话框,如果它是一个_1文件。您可以在此处订阅此验证中的FileOK事件和插槽。您可以使用正则表达式在此处验证文件名。这是最好的......我猜。

答案 1 :(得分:3)

OpenFileDialogEx described in this CodeProject article是标准OpenFileDialog的扩展。该扩展的主要目的是修改对话框的显示,但还有一些额外的花里胡哨。例如,OFDEx添加了一些事件,用于文件更改,文件夹更改等。

有人指出CDN_INCLUDEITEM通知似乎满足了过滤对话框中显示的文件列表的愿望。它似乎会,但它没有。 CDN_INCLUDEITEM没有做您想象或想要的事情。

根据this MSDN Mag article

  

如果您使用创建对话框   OFN_ENABLEINCLUDENOTIFY,Windows发送   你的钩子程序是CDN_INCLUDEITEM   对其添加的每个项目的通知   公开名单。如果你返回FALSE,   Windows排除该项目。 问题   是的,Windows不会通知您   普通文件,只有伪对象   就像命名空间扩展一样。当你   通过阅读文档   放大镜,印刷品   完全清楚:“对话框   始终包括具有两者的项目   SFGAO_FILESYSTEM和   SFGAO_FILESYSANCESTOR属性,   无论返回的值如何   CDN_INCLUDEITEM。“显然是   Redmondtonians添加了CDN_INCLUDEITEM   为了自己的目的,没有   包括过滤普通文件名。

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

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

答案 2 :(得分:1)

OpenFileDialog不支持此功能。另一种方法是使用第三方控件,例如FileView,它允许您使用任何您想要的标准过滤项目,例如正则表达式。

答案 3 :(得分:0)

您应该可以使用以下过滤器执行此操作: 数据文件| * _1.xml

答案 4 :(得分:-1)

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