【问题标题】:Creating Virtual Folders and hooking them into the file system创建虚拟文件夹并将它们挂接到文件系统
【发布时间】:2012-12-18 12:24:27
【问题描述】:

我有大量用于我正在处理的项目的文件夹。长期以来,我一直试图找到一种更好的方法来对它们进行排序,并且我想编写一个应用程序来根据我所说的任何标准创建组,例如“2011 年的文件夹”或“包含 x 类型文件的文件夹” "等等。

这相当简单,并且在 winForms 或 WPF 或其他东西中使用自己的 UI 进行编码不会造成太大问题。但我认为如果我能让这些文件夹看起来是文件系统的一部分会更好,这样其他应用程序(如现有的文件浏览器)可以看到它们。

这可能吗?会不会引起我没有考虑过的问题?如果可能的话,我该怎么做?

我想到的一种方法是让应用程序监控文件系统并在每次发生更改时创建文件夹快捷方式,但我很好奇是否有可能通过“网关”向资源管理器实际呈现假文件系统'文件夹

编辑:好吧,这显然是有可能的,因为http://www.virtualfolder.net/ 可以做到,现在我想到了 TrueCrypt 也可以,虽然如果它没有那就太好了不必显示为单独的驱动器。那么问题就变成了,我该如何实现呢?

【问题讨论】:

  • Windows 7 内置了该功能

标签: windows winapi file-io filesystems


【解决方案1】:

您可以创建一个Shell Namespace Extension,它收集您想要的文件信息,并以您希望的任何方式在 Windows 资源管理器中显示它。 You can choose where 您的扩展位于,无论是作为它自己的顶级节点、另一个系统虚拟文件夹/扩展的子节点,还是作为文件系统文件夹的子节点。

编写 SNE 并非易事,但它比编写较低级别的文件系统驱动程序要容易得多,并且不需要特殊的面向驱动程序的编译器。任何支持开发 COM 对象的编译器都可以工作。

【讨论】:

    【解决方案2】:

    这是使用文件系统驱动程序或文件系统过滤器驱动程序完成的。首先让您创建一个虚拟文件系统并将其挂载到驱动器号以及 NTFS 驱动器上的文件夹(文件夹必须存在,但其内容被虚拟文件系统目录树“替换”)。文件系统过滤器驱动程序允许您在现有文件夹中引入虚拟文件和文件夹,而无需替换它们。

    VirtualFolder 在创建驱动器号时使用文件系统驱动程序。

    这两种类型的驱动程序都是用 C 语言编写的,并且在内核模式下工作。编写它们需要深入了解 Windows 内部结构和驱动程序开发经验(因为文件系统驱动程序是最复杂的驱动程序类型之一)。

    我们提供多种与虚拟存储相关的产品。其中之一,回调文件系统,是一个文件系统驱动程序。它调用您的用户模式代码来执行实际的文件系统功能。另一个产品 CallbackFilter 是一个 FS 过滤器驱动程序(它也调用您的用户模式代码)。但是,当前版本的 CallbackFilter 不允许您引入虚拟文件和文件夹(这将在下一个版本中实现)。

    还有 Pismo File Mount 产品可用,它们使用过滤驱动技术。您可以与他们核对是否可以完成您的需求。

    【讨论】:

      【解决方案3】:

      据我所知,您正在寻找一种方法来呈现预定义文件查询的结果,以使它们看起来好像位于文件系统中的特定位置。如果这是正确的,您可能需要查看Hard Links and Junctions。您可以使用这些文件系统服务做什么是有限制的。然而,它真的很容易实现。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-19
        • 1970-01-01
        相关资源
        最近更新 更多