【问题标题】:OpenFileDialog - only display filenames that have no extensionsOpenFileDialog - 仅显示没有扩展名的文件名
【发布时间】:2011-02-20 16:34:45
【问题描述】:

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

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



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

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

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

无扩展名的文件



我知道 ***.* 会这样做,但它还会在同一目录中显示 .NCF、.TXT 和所有其他文件。

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



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





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

谢谢。

【问题讨论】:

    标签: c# filter wildcard openfiledialog


    【解决方案1】:

    我知道这行得通:

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

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

    虽然这是一篇旧帖子,但我认为它会对寻找仅显示没有扩展名的文件的方法的人有所帮助..

    【讨论】:

      【解决方案2】:

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

      编辑#1

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

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

      编辑#2

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

      希望对你有帮助!

      【讨论】:

      • 我只是以自述文件为例。我将在我的帖子中更改它,因为它不是一个很好的例子。
      【解决方案3】:

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

      编辑:或者,请参阅这篇 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。

      【讨论】:

      • 嗨,我正在寻找这个问题的答案,有人按照你的想法来实现它吗?这是工作??怎么办??
      • @DavidMichaeli:我没有实现这个,所以我不知道它是否有效。我在答案中包含的链接显示了如何执行此操作。
      • 不幸的是,这个解决方案不起作用。 CDN_INCLUDEITEM 只允许过滤一些合成扩展。无论您从 CDN_INCLUDEITEM 处理程序返回什么,都将包含文件系统对象。
      【解决方案4】:

      我认为使用*. 会起作用,但它不起作用,所以这似乎是OpenFileDialog 控件的限制。

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

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

      祝你好运!

      【讨论】:

      • 没有。另一个软件程序正在创建没有扩展名的文件。我的客户只是希望能够看到没有扩展名的文件,以便他可以轻松地在包含其他扩展名文件的目录中打开它们。
      • 即使 OpenFileDialog 是密封的(不可继承),您也可以将其用作嵌套类型。例如,使用将获取 NativeDialog 的属性。然后,您始终使用 NativeDialog 属性编写方法,就完成了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-23
      • 2016-12-24
      相关资源
      最近更新 更多