我的C#程序中有以下代码:
OpenFileDialog fDialog = new OpenFileDialog();
fDialog.Title = "Open a file";
fDialog.Filter =
"NCF files (*.ncf)|*.ncf|All files (*.*)|*.*|No Extensions (*.)|*.";
我希望能够让用户选择以下内容:
* .NCF (仅限.NCF扩展名的文件)
**。* (所有文件)
以及无扩展名的文件,例如:
filewithnoextension 的
我知道***。*会这样做,但它也会在同一目录中显示.NCF,.TXT和所有其他文件。
我只想显示没有扩展名的文件名。
用*过滤。没有办法。使用DOS窗口( dir *。)进行此操作时效果很好,但C#似乎忽略了*。过滤
有没有办法用C#做到这一点?
感谢。
答案 0 :(得分:2)
自述文件通常具有扩展名。我想你做了,但你检查了这个文件夹选项,看看已知文件类型的扩展名吗?它改变了什么吗?
编辑#1
坦率地说,我怀疑你是否能够制作没有扩展名的OpenFileDialog显示文件,因为Filter属性是基于扩展名。
也许您可以使用System.IO
命名空间对象(例如DirectoryInfo
)继承您自己实现的OpenFileDialog,这将允许您使用Getfiles()
方法获取浏览的文件夹文件,然后通过LINQ过滤自己,只显示FileInfo.Extension
属性没有扩展名的文件。
编辑#2
由于OpenFileDialog是sealed,您可以将它用作嵌套类型,并使用此嵌套类型实现您自己的方法。
我希望这可以帮到你!
答案 1 :(得分:1)
我知道这有效:
fDialog.Filter = "No extension Files|" + null;
我没有通过多项选择进行测试..
Altough这是一篇很老的帖子,我觉得有人会寻找一种只展示没有扩展名的文件的人。
答案 2 :(得分:0)
我认为使用*.
会起作用,但事实并非如此,所以它似乎是OpenFileDialog
控件的限制。
您可以创建自己的对话框,但OpenFileDialog
不可继承,因此这只会为一个小功能做很多工作。
您自己的应用程序是否创建了没有扩展名的文件?如果是这种情况,您可以为其过滤提供自定义扩展。如果不是,那么恐怕我无法想到任何其他事情来帮助你:(
祝你好运!答案 3 :(得分:0)
如果其他软件程序在同一位置创建这些文件,为什么不让你的代码为该文件夹中的每个无扩展名文件添加扩展名(如“.XXX”一样无害),然后 显示对话框?
修改或者,请参阅此MSDN文章:
http://msdn.microsoft.com/en-us/library/ms646960(VS.85).aspx
来自过滤器部分:
CDN_INCLUDEITEM通知 消息提供了另一种过滤方式 对话框的名称 显示器。要使用此消息,请提供 一个OFNHookProc钩子程序和 指定OFN_ENABLEINCLUDENOTIFY OPENFILENAME结构中的标志 在创建对话框时。每 用户打开文件夹的时间 对话框发送CDN_INCLUDEITEM 通知你的钩子程序 对于新开的每个项目 夹。钩子的返回值 程序指示是否对话框 框应显示该项目 文件夹的项目列表。
在 Explorer-Style Hook Procedures 部分的底部,文章解释了如何执行此操作。基本上,您将事件处理程序传递给OpenFile对话框,每次用户导航到新文件夹时,对话框都会遍历文件夹中的所有文件,并为每个文件调用事件处理程序。在事件处理程序中,您可以放置代码以确定文件是否具有扩展名,并相应地返回true或false。