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

fra*_*Xis 5 c# wildcard openfiledialog filter

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

        OpenFileDialog fDialog = new OpenFileDialog();
        fDialog.Title = "Open a file";
        fDialog.Filter =
           "NCF files (*.ncf)|*.ncf|All files (*.*)|*.*|No Extensions (*.)|*.";
Run Code Online (Sandbox Code Playgroud)



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

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

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

filewithnoextension



我知道 ***.* 会执行此操作,但它还会显示 .NCF、.TXT 以及同一目录中的所有其他文件。

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



用*过滤。没有成功。使用 DOS 窗口 ( dir *. ) 时它工作得很好,但 C# 似乎忽略了 *. 筛选。





有没有办法用 C# 来做到这一点?

谢谢。

Mus*_*sis 0

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

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

http://msdn.microsoft.com/en-us/library/ms646960(VS.85).aspx

过滤器部分:

CDN_INCLUDEITEM 通知消息提供了另一种方法来过滤对话框显示的名称。要使用此消息,请提供一个 OFNHookProc 挂钩过程,并在创建对话框时在 OPENFILENAME 结构中指定 OFN_ENABLEINCLUDENOTIFY 标志。每次用户打开文件夹时,对话框都会针对新打开的文件夹中的每个项目向挂钩过程发送 CDN_INCLUDEITEM 通知。挂钩过程的返回值指示对话框是否应显示文件夹项目列表中的项目。

在“资源管理器式挂钩过程”部分的底部,本文解释了如何执行此操作。基本上,您将一个事件处理程序传递给 OpenFile 对话框,每次用户导航到新文件夹时,该对话框都会迭代该文件夹中的所有文件,并为每个文件调用事件处理程序。在事件处理程序中,您可以放置​​代码来确定文件是否具有扩展名,并相应地返回 true 或 false。