从C#中的打开文件对话框中排除文件扩展名

我试图在我的C#openFileDialog上放置一个filter来排除某些文件扩展名。 例如,我希望它显示目录中不是.txt文件的所有文件。

有没有办法做到这一点?

使用BCL OpenFileDialog没有直接的方法。

我可以想到几个选择:

1)制作一个只包含您想要支持的所有类型的filter。 这是我的建议,因为这是进行此类操作的最常见方式。

2)使用这个自定义OpenFileDialog实现的内容 。 然后,如果所选文件的扩展名为.txt,则可以覆盖OnFileNameChanged()方法以可能禁用“打开”按钮。

3)让用户选择.txt文件,抛出错误对话框,然后重新打开文件对话框。 这对我来说很笨拙而且不太好,不过……

我不认为这是可能的。 设置filter的方式是,您可以选择要显示的文件,但我认为没有办法显示“除…以外的所有文件”。 想想看,你见过Windows中的Open File Dialog吗? 我不认为我见过一个。

您最好的选择是让他们选择所有文件,然后提示用户是否选择了不允许的文件或将其过滤到您可以处理的所有可能文件。

找到谷歌搜索“OpenFileDialog”

编辑:很抱歉没有扩展EXCLUDE方面。 你可能不需要走到这个极端,但它会满足你的需求….

  • 对用户可以选择的所有文件执行递归目录搜索。 (希望这是一小组文件夹。)
  • 唯一标识这些文件的扩展名。 (System.IO.Path.GetExtension()和Linq的.Distint()方法可以在这里运行良好)
  • 从列表中删除“.txt”条目。
  • 通过循环遍历这些扩展来构造filter字符串。

我担心这是不可能的。 你要么必须要

  • a)包括应该允许的所有扩展的长列表,或

  • b)允许所有扩展,然后使用简单的签入代码,如果所选文件具有扩展名.txt ,则重新打开对话框。

另外,你能为这个问题提供更多的背景吗? 我无法设想我可能明确需要排除某个扩展的场景。 在几乎所有情况下,您都不可能只使用filter(可能需要检查一些代码)。

这是一种完全不同的方法,您不太可能使用它。

而不是使用OpenFileDialog,分析您需要的特定function并创建自己的对话框。 您可以轻松地提供您想要的任何过滤,但随后难度转移到实现和维护新UI。

我不建议您这样做,但有时用户会坚持他们需要的东西。

另一个替代方案:不是使用对话框,而是提出完全不同的东西,非常适合应用程序。 这可能是不可能的,但后来我们对该应用程序了解不多。

您无法设置filter以从文件对话框中排除扩展名。

但是,您可以在对话框上为FileOk事件实现委托。 此事件在接受用户选择的文件之前触发,事件参数提供Cancel属性,您可以将其设置为禁止选择。

它并不像实际使错误的文件不可见那样优雅,但它允许您禁止选择错误类型的文件。

PS:不要忘记向用户反馈文件未被接受的原因,否则他们可能想知道为什么对话框在选择’txt’文件时没有关闭。