繁体   English   中英

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

[英]Excluding file extensions from open file dialog in C#

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

有没有办法做到这一点?

我不认为这是可能的。 过滤器的设置方式是您可以选择要显示的文件,但我认为没有办法显示“除...之外的所有文件”。 想想看,你有没有在 Windows 中看到一个打开文件对话框有这个? 我想我从来没有见过一个。

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

使用 BCL OpenFileDialog 没有直接的方法来做到这一点。

我可以想到几个选项:

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

2) 使用与此自定义 OpenFileDialog 实现类似的内容。 如果所选文件具有 .txt 扩展名,则您可以覆盖 OnFileNameChanged() 方法以潜在地禁用“打开”按钮。

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

通过 Google 搜索“OpenFileDialog”找到

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

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

恐怕这是不可能的。 你要么必须

  • a) 包括一长串应该允许的所有扩展名,或

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

另外,您能否为这个问题提供更多背景信息? 我无法设想我可能明确需要排除某个扩展名的场景。 在几乎所有情况下,您可能无法仅使用过滤器(可能还有一些代码检查)就可以逃脱。

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

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

我不建议你这样做,但有时用户会非常坚持他们需要什么。

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

您不能设置过滤器以从文件对话框中排除扩展名。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM