在虚拟文件系统中运行进程?

时间:2014-09-28 20:41:52

标签: c++ qt symlink virtualfilesystem

我想要实现的是运行一个程序,该程序认为文件夹存在于其自己的文件夹中,而实际上该文件夹位于系统的其他位置。

所以我的程序会启动一个进程并对进程说:位于C:\ A的文件夹A位于您自己的目录C:\ Program Files(x86)\ SomeProgram \ A

所以"虚拟"目录只对该进程可见。

我使用Qt编程我的程序,所以如果有任何Qt函数我可以使用它会很好(与可移植性有关)。但是,计划C ++或任何Windows绑定的API都没问题。

我在考虑NTFS联结或符号链接,但我不知道如何在C ++中创建其中任何一个,更不用说将它们绑定到特定进程。

提前致谢!

修改

关于上述内容,我发现了这个问题:https://superuser.com/questions/234422/does-windows7-support-symbolic-links-folder-shortcuts。但是,它仅显示如何从命令行执行所需的操作,并且它不会受到进程限制。

编辑2:

一些额外的信息:我试图创建一个由几个其他目录组成的虚拟目录,然后合并(我使用优先级系统来决定哪些文件" win& #34;来自其他文件)。然后,这些合并的目录将作为包含合并文件的一个目录显示给目标进程。

2 个答案:

答案 0 :(得分:0)

我想我会坚持使用Window&m; mklink命令。它似乎最符合我的需求。

我要做的是在所有不是Windows的操作系统上使用QFile :: link(),在Windows上使用mklink进行QProcess。这应该适用于每个操作系统。

有一个很好的例子,请看这里:https://stackoverflow.com/a/21013935/979732

答案 1 :(得分:0)

这些任务是通过使用文件系统过滤器驱动程序完成的。驱动程序拦截进入文件系统的OS请求,并允许您将自己的虚拟文件和目录插入磁盘上的现有目录。但是,过滤器驱动程序对于您的特定任务来说可能是一种过度杀伤。

评论中提到的Detours方法需要系统范围内的文件API挂钩,并且会降低整个系统的速度(文件系统过滤器驱动程序附加到一个磁盘上,这是一种记录的方法,因此它更快,更强大)。