2014-09-28 52 views
1

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

所以我的程序将启动一个进程,说的过程:文件夹是在C:\ 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:

一些额外的信息:我试图创建一个由一对夫妇的其他目录的虚拟目录,但后来合并了(我使用一个优先系统,以决定哪些文件从其他文件中“赢”)。这些合并的目录将作为包含合并文件的一个目录出现在目标进程中。

+0

你在谈论符号链接吗? – 2014-09-28 20:43:29

+0

我认为是这样,但是我需要链接仅对目标进程可见并使用C++创建它们。 – Qub1 2014-09-28 20:45:54

+1

一种方法是挂钩底层文件系统API(CreateFile,FindFirstFile等)并在那里执行重定向。如果你走这条路,我建议查看微软的Detours库。 – MrEricSir 2014-09-28 21:04:06

回答

0

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

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

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

0

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

评论中提到的Detours方法需要全系统挂接文件API,并且会降低整个系统的性能(文件系统过滤器驱动程序被附加到一个磁盘上,并且它是一种文档化的方法,因此它更快,更强大)。