将NTFS文件夹的内容动态合并为虚拟文件夹

时间:2012-05-23 06:46:37

标签: c++ winapi filesystems filesystemwatcher ntfs

我需要根据一些规则将多个NTFS文件夹的内容合并为一个。 这些规则将确保没有冲突的名称。

我最简单的解决方案是将NTFS Link(或Junction)创建到指向源文件夹中每个文件的目标文件夹中。

到目前为止这可行,但我遇到的问题是不会发生其他文件,删除的文件也不会消失。

嗯,当然我可以运行后台进程(服务)监听文件系统的源文件夹,并在你的飞行中对NTFS链接进行适当的修改,但这是要走的路吗?

第一个问题是: 1.最优雅的方式是什么? 2.我见过多个程序,例如可以将ZIP或ISO文件的内容挂载到某个NTFS文件夹。他们是如何运作的?

P.S。目标是以编程方式完成所有操作(c#和/或c ++)。

2 个答案:

答案 0 :(得分:2)

这是一个允许您在Window中创建用户模式文件系统的项目:Dokan

  

如果要在Windows上创建新文件系统,例如   改进FAT或NTFS,需要开发文件系统驱动程序。   开发在Windows上以内核模式工作的设备驱动程序是   非常困难。通过使用Dokan库,您可以创建自己的库   文件系统非常容易,无需编写设备驱动程序。

答案 1 :(得分:2)

可以通过两种方式将内容映射到现有文件夹:

  1. 文件系统过滤器驱动程序过滤对现有文件夹的FS请求,并显示该文件夹的已修改内容。
  2. 文件系统驱动程序创建一个虚拟文件系统,并将其作为NTFS驱动器上的连接点进行安装。
  3. 两种方法都需要相应的内核模式驱动程序。

    公开ZIP(或其他类似文件)的应用程序使用上述方法之一。作为磁盘映像的ISO文件可以直接作为虚拟磁盘公开,也可以挂载到NTFS文件夹。在后一种情况下,需要内核模式磁盘驱动程序。

    您的特定任务可以使用我们的Callback File System(CBFS)产品完成。 CBFS提供预先创建的内核模式驱动程序,允许您在用户模式下编写与文件系统相关的代码。 CBFS包含几乎可以查找的Mapper示例 - 它将现有文件夹的内容显示为新的虚拟文件系统,您可以将其安装到NTFS文件夹(CBFS支持此功能)。公共非商业项目可以使用非商业许可证。 API适用于.NET,C ++,Java和Delphi。