我想知道如何在打开的文件对话框中过滤文件(在winforms中) 基于正则表达式。文件具有相同的扩展名(.xml)。 大文件被分成几个同名的文件,只能用_1分隔... 我们只想显示没有_1(第一个数据文件)的文件
打开文件对话框有一个属性过滤器,但我不知道如何以我们的文件名格式指定它,因此是正则表达式。
Thankx, 尼基
答案 0 :(得分:3)
我认为你不能这样做,它只是根据扩展名过滤文件列表。
我认为你必须让用户选择一个xml文件,验证然后再次弹出对话框,如果它是一个_1文件。您可以在此处订阅此验证中的FileOK事件和插槽。您可以使用正则表达式在此处验证文件名。这是最好的......我猜。
答案 1 :(得分:3)
OpenFileDialogEx described in this CodeProject article是标准OpenFileDialog的扩展。该扩展的主要目的是修改对话框的显示,但还有一些额外的花里胡哨。例如,OFDEx添加了一些事件,用于文件更改,文件夹更改等。
有人指出CDN_INCLUDEITEM通知似乎满足了过滤对话框中显示的文件列表的愿望。它似乎会,但它没有。 CDN_INCLUDEITEM没有做您想象或想要的事情。
如果您使用创建对话框 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。