C# OpenFileDialog-仅显示没有扩展名的文件名

C# OpenFileDialog-仅显示没有扩展名的文件名,c#,filter,wildcard,openfiledialog,C#,Filter,Wildcard,Openfiledialog,我的C#程序中有以下代码: 我希望用户能够从以下选项中进行选择: *.NCF(仅扩展名为.NCF的文件) ***(所有文件) 以及没有扩展名的文件,例如: 无扩展的文件 我知道****会这样做,但它也会显示.NCF、.TXT以及同一目录中的所有其他文件我只希望能够显示没有扩展名的文件名。 使用*进行过滤。这不管用。当使用DOS窗口(dir*)时,它可以正常工作,但C#似乎忽略了*。过滤器 有什么办法可以用C#做到这一点吗 谢谢。自述文件通常有扩展名。我想是的,但是您是否选中此文件夹选项

我的C#程序中有以下代码:



我希望用户能够从以下选项中进行选择:

*.NCF(仅扩展名为.NCF的文件)
***(所有文件)

以及没有扩展名的文件,例如:

无扩展的文件




我知道****会这样做,但它也会显示.NCF、.TXT以及同一目录中的所有其他文件

我只希望能够显示没有扩展名的文件名。




使用*进行过滤。这不管用。当使用DOS窗口(dir*)时,它可以正常工作,但C#似乎忽略了*。过滤器






有什么办法可以用C#做到这一点吗


谢谢。

自述文件通常有扩展名。我想是的,但是您是否选中此文件夹选项以查看已知文件类型的扩展名?它改变了什么吗

编辑#1

坦率地说,我怀疑您是否能够生成没有扩展名的显示文件,因为属性基于扩展名

也许您可以使用名称空间对象继承自己实现的OpenFileDialog,例如,这将允许您使用该方法获取浏览过的文件夹文件,然后通过LINQ进行过滤,以仅使用属性显示不带扩展名的文件

编辑#2

由于OpenFileDialog是嵌套类型,因此可以将其用作嵌套类型,并使用此嵌套类型实现自己的方法


我希望这对你有帮助

我认为使用
*。
会起作用,但事实并非如此,所以这似乎是
OpenFileDialog
控件的一个限制

您可以创建自己的对话框,但是OpenFileDialog是不可继承的,因此,对于一个小功能来说,这将是一项繁重的工作

没有扩展名的文件是由您自己的应用程序创建的吗?如果是这样的话,您可以为它提供一个自定义的过滤扩展。如果不是,那么恐怕我想不出任何其他方法来帮助您:(


祝您好运!

如果其他软件程序在同一位置创建这些文件,为什么不让您的代码为该文件夹中每个无扩展名的文件添加一个扩展名(如“.XXX”)然后显示对话框

编辑:或者,请参阅此MSDN文章:

过滤器部分:

CDN_包括以下通知: 消息提供了另一种过滤方法 对话框中显示的名称 显示。若要使用此消息,请提供 hook proc钩子过程和 指定OFN_ENABLEINCLUDENOTIFY OPENFILENAME结构中的标志 创建对话框时。每个 用户打开文件夹时 对话框发送CDN\u INCLUDEITEM 通知您的钩子过程 对于新打开的文档中的每个项目 文件夹。挂钩的返回值 过程指示对话框是否打开 框中应显示项目 文件夹的项目列表

浏览器风格的钩子过程部分的底部,这篇文章解释了如何做到这一点。基本上,你将一个事件处理程序传递给OpenFile对话框,每次用户导航到一个新文件夹时,对话框都会遍历文件夹中的所有文件,并为每个文件调用你的事件处理程序。在在nt处理程序中,您可以使用代码来确定文件是否具有扩展名,并相应地返回true或false。

我知道这是可行的:

fDialog.Filter = "No extension Files|" + null;
我没有测试过多个选项


虽然这是一篇老文章,但我认为如果有人想找到一种只显示没有扩展名的文件的方法,这会对他们有所帮助。

我只是以自述为例。我打算在我的文章中更改它,因为这不是一个好例子。不。另一个软件程序正在创建没有扩展名的文件。我的客户只是希望能够查看没有扩展名的文件,以便他可以轻松地将其与其他具有扩展名的文件一起在目录中打开。即使OpenFileDialog已密封(不可继承),您可以将其用作嵌套类型。例如,使用一个将获取NativeDialog的属性。然后,您总是使用NativeDialog属性编写您的方法,您就完成了。您好,我正在寻找这个问题的答案,有人按照您的想法实现了它?它正在工作??如何实现???@DavidMichaeli:我没有实现这个,所以我不知道我在回答中包含的链接说明了如何执行此操作。不幸的是,此解决方案不起作用。CDN\u INCLUDEITEM只允许筛选一些合成扩展名。无论您从CDN\u INCLUDEITEM处理程序返回什么,都将包含文件系统对象。
fDialog.Filter = "No extension Files|" + null;