根据内容过滤OpenFileDialog中显示的文件?

有没有办法修改OpenFileDialog的行为,以便它查看它打开的文件夹中的文件内部,然后根据其内容忽略某些文件?

一个例子是打开一个充满Zip文件的文件夹,但只显示包含某个文件的文件夹。

从文档中,有HookProc,但我不确定我是如何使用它的。

请注意,如果可能,我意识到这将是一个相对缓慢的操作。 目前我并不关心性能。

谢谢!

我不会忽视OpenFileDialog的复杂性。 构建一个真正有用的东西并不容易。 当您构建自己的对话框时,它不是“正常”对话框,因此会使用户感到困惑。 即使你做得很好也是如此,这很难。 所以我建议你坚持扩展现有的东西,而不是写一些新东西。

查看这篇文章,了解OFD的扩展 ,可以/可以进行调整以完全按照您的需要进行操作。 你在C#中编写了一个响应路径选择的回调函数。

相关: FolderBrowserDialogEx是FolderBrowserDialog上的类似扩展。 尽管名称如此,您可以将其配置为搜索文件以及文件夹。 当选择某个(文件夹,文件)时会调用回调,并且在该回调中您可以执行您需要执行的操作。 例如,查看文件夹中的文件并填充文件列表以仅显示这些文件。


您可能考虑的另一个选项是Ookii的对话库 。 这是OpenFileDialog的一个开源实现,它包含了Vista中所有新对话框内容的COM包装器。 使用该库,您可以弹出Vista OpenFileDialog并使用C#代码从IFileDialogEvents接口接收事件。 一个这样的事件是OnFolderChange()。 在处理程序中,您可以调用IFolder.GetFolder(),它将为您提供一个IShellItem ,它为您提供用户正在更改的文件夹。 下一步是逐项列出并可能过滤文件集,这是我将留给读者的练习……

不,你必须为此实现自己的function。 但说实话,OpenFileDialog实际上并没有做很多事情。 说实话,是的,你可能会陷入其中,但是当真正的工作是检查文件的内容然后你可以编写自己的简单的OpenFileDialog类时,你将做很多工作。那。

您可能会发现此问题对于列出zip文件的内容很有帮助:

如何在c#中列出.zip文件夹的内容?

(注意,您可以将其线程化以提​​高性能,但不要跨越多个线程)

您可以使用Windows API代码包(随源提供)。 与Winforms / WPF中的版本相比,“公用文件”对话框function提供了更多文件对话框的function。

http://code.msdn.microsoft.com/WindowsAPICodePack