4

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

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



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

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

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

filewithnoextension



I know ***.* 会执行此操作,但它还会显示同一目录中的 .NCF、.TXT 和所有其他文件。

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



用 * 过滤。不成功。使用 DOS 窗口 ( dir *. )时它工作正常,但 C# 似乎忽略了 *. 筛选。





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

谢谢。

4

4 回答 4

2

我知道这有效:

fDialog.Filter = "No extension Files|" + null;

我没有测试过多项选择..

尽管这是一篇旧文章,但我认为它会让那些正在寻找一种只显示没有扩展名的文件的人受益..

于 2014-03-14T20:45:17.037 回答
1

自述文件通常具有扩展名。我想你做到了,但你是否检查了这个文件夹选项来查看已知文件类型的扩展名?它改变了什么吗?

编辑#1

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

System.IO也许您可以使用命名空间对象继承您自己实现的 OpenFileDialog 的基础DirectoryInfo,例如,这将允许您使用该Getfiles()方法获取浏览的文件夹文件,然后通过 LINQ 过滤自己以仅使用该FileInfo.Extension属性显示没有扩展名的文件。

编辑#2

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

我希望这可以帮助你!

于 2010-05-18T01:05:24.463 回答
0

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

您可以创建自己的对话框,但它OpenFileDialog是不可继承的,因此对于一个小功能来说,这最终需要做很多工作。

没有扩展名的文件是您自己的应用程序创建的吗?如果是这种情况,您可以给它一个自定义扩展来进行过滤。如果不是,那么恐怕我想不出其他可以帮助您的方法:(

祝你好运!

于 2010-05-18T01:37:57.577 回答
0

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

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

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

过滤器部分:

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

在Explorer-Style Hook Procedures部分的底部,文章解释了如何执行此操作。基本上,您将一个事件处理程序传递给 OpenFile 对话框,并且每次用户导航到一个新文件夹时,该对话框都会遍历该文件夹中的所有文件并为每个文件调用您的事件处理程序。在事件处理程序中,您将放置代码来确定文件是否具有扩展名,并相应地返回 true 或 false。

于 2010-05-18T01:44:53.690 回答