【问题标题】:C# Open/SaveFileDialog with a different file systemC# Open/SaveFileDialog 使用不同的文件系统
【发布时间】:2012-05-13 18:43:07
【问题描述】:

我希望打开标准窗口并保存文件对话框,但是,我使用它的特定应用程序是一个远程文件系统(基本上,我很想以某种方式为 SaveFileDialog 提供一个 IFileSystem 接口并拥有它神奇地改变我提供它们看到的文件)。有谁知道支持此功能的那些对话框的完整实现?有什么方法可以使用标准的 C#/windows 对话框吗?

如果没有,我将自己实现对话框。我仍然希望有任何资源来实现这些对话框,即使它们不支持此功能,这样我就可以将它们拆开并自己添加该功能。

谢谢!

【问题讨论】:

  • 你不能让 shell 识别这个其他文件系统,以便文件对话框免费工作吗?

标签: c# winforms filesystems openfiledialog savefiledialog


【解决方案1】:

唯一的选择是实现您自己的 Shell 命名空间扩展。它可能被注册为“我的电脑”子项,因此它看起来像另一个驱动器。 注意:这是一项乏味的工作,并且由于 .NET 框架的限制(

Here 就是一个例子。

【讨论】:

  • 我认为 4.0 之前的限制只是你不能并排加载不同版本的 CLR,所以你仍然可以编写托管扩展,但它被卡在运行任何东西CLR 可能已经在资源管理器中运行?
  • 这正是我所说的限制。
  • 这看起来几乎正是我想要的。尽管理想情况下我无法浏览除此之外的任何其他内容,但我会看看是否有办法隐藏其他所有内容,或者只是拒绝不在该位置的文件。感谢您的链接!
  • @dzendras - 如果这是限制,那么您就没有必须使用 C/C++,您只限于已经加载的任何 CLR。大多数时候,这意味着您不能使用 C#/CLR 4,因为其他东西已经加载了 v2 CLR。不是这样吗?
  • 是的。但是,如果应用程序需要 .NET 4.0(或更高版本),则没有问题:stackoverflow.com/questions/3053876/…
【解决方案2】:

这些类是对本地 Windows shell api 函数的调用的非常薄的包装器。 GetOpenFileName() 用于 XP 及更早版本,IFileOpenDialog COM 接口用于 Vista 及更高版本。如果您在资源管理器中看不到文件系统,那么这些包装器将毫无用处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-20
    • 2010-10-10
    • 1970-01-01
    • 2021-06-21
    • 2020-10-21
    • 2015-06-02
    • 2012-03-03
    相关资源
    最近更新 更多