我试图实现的是运行一个程序,它认为文件夹存在于自己的文件夹中,而实际上文件夹在系统的其他地方。
因此,我的程序会启动一个进程,并对进程说:位于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:
一些额外信息:我正在尝试创建一个虚拟目录,该目录由几个其他目录组成,但随后合并(我使用优先级系统来决定哪些文件从其他文件中"获胜")。这些合并后的目录在目标进程中显示为包含合并文件的一个目录。
我想我会坚持使用Window的mklink命令。它似乎最适合我的需要。
我要做的是在所有非Windows操作系统上使用QFile::link(),在Windows上使用带mklink的QProcess。这应该适用于每个操作系统。
要获得一个好的示例,请查看此处:https://stackoverflow.com/a/21013935/979732
这样的任务是通过使用文件系统过滤器驱动程序来完成的。驱动程序会拦截到文件系统的操作系统请求,并允许您将自己的虚拟文件和目录插入到磁盘上的现有目录中。不过,对于您的特定任务来说,过滤器驱动程序可能是一种过度使用。
评论中提到的Detours方法需要在系统范围内挂接文件API,这会降低整个系统的速度(文件系统过滤器驱动程序连接到一个磁盘上,这是一种有文档记录的方法,因此它更快、更健壮)。