2014-09-28 82 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,並且會降低整個系統的性能(文件系統過濾器驅動程序被附加到一個磁盤上,並且它是一種文檔化的方法,因此它更快,更強大)。