创建虚拟文件夹并将它们挂钩到文件系统中

时间:2012-12-18 12:24:28

标签: windows winapi file-io filesystems

我正在为我正在进行的项目收集大量文件夹。我一直试图找到一种更好的方法来对它们进行长时间的排序,我想编写一个基于我说的标准创建组的应用程序,例如“2011年的文件夹”或“包含ax类型文件的文件夹” “等等。

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

这可能吗?它会导致我没有考虑过的问题吗?如果有可能,我该如何去做呢?

我认为这样做的一种方法是让应用程序监控文件系统并在每次更改时创建文件夹快捷方式,但我很好奇是否有可能通过'网关向浏览器提供虚假文件系统'文件夹

编辑:好的,显然可能因为http://www.virtualfolder.net/可以做到这一点,现在我想到了它可以 TrueCrypt ,尽管如果它会很好它不必作为单独的驱动器出现。所以问题就变成了,我该如何实现呢?

3 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:4)

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

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

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

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

还有Pismo File Mount产品,他们使用过滤器驱动技术。您可以与他们核实是否可以完成您需要的工作。

答案 2 :(得分:0)

从我收集的内容中,您正在寻找一种方法来呈现预定义文件查询的结果,使其看起来好像位于文件系统中的特定位置。如果这是正确的,您可能需要查看Hard Links and Junctions。您可以使用这些文件系统服务进行限制。然而,实施起来非常简单。