2011-02-23 100 views
0

假設我正在編寫一個庫或一組工具集mytool,其中定義了其他人可以使用的類MyTool。假設我有一個目錄樹是這樣的:如何在包含的C++源代碼中編寫外部文件的路徑

project 
| - program1 
    | - main1.cpp 
... 
| - mytool 
    | - mytool.h 
    | - mytool.cpp 
    | - data.txt 
tool1.cpp

我用的是外部的二進制大文件data.dat

ifsteam f("data.txt"); 

main1.cpp使用mytool,但如果mytool.(s)omain1.o程序鏈接可以」 t找到data.dat,對於這種情況,我需要將上一行更改爲:

ifstream f("../mytool/data.txt"); 

,但我不知道其他人把mytool例如,他們可以有不同的目錄樹:(?我說的對)

project 
| - program1 
    | - main1.cpp 
    | - mytool 
     | - tool1.h 
     | - tool2.cpp 
     | - data.dat 

另外的路徑取決於執行程序的地方。

我可以想象的唯一解決方案是傳遞給類構造器MyTooldata.dat的路徑,但我想隱藏該文件供用戶使用。

+0

考慮使用'boost :: filesystem' – AJG85 2011-02-23 18:33:40

回答

1

您需要知道文件的絕對路徑,或文件相對於工作目錄的路徑。一種方法是在編譯程序之前有一個用戶運行的配置腳本。然後該腳本將硬編碼到您的程序的相關路徑中,以便程序以爲用戶定製的方式硬連線。

有時這不是一種選擇,因爲您不想分發源代碼,或者因爲您希望允許在運行時更改路徑。然後你可以在運行時讀取一個配置文件,說明文件的位置。但這只是一個抽象層:你仍然需要知道配置文件的位置。例如,您可能會詢問系統用戶的個人目錄,然後在該目錄中找到該文件。這是在編譯時和運行時計算路徑之間的一種混合。

0

您需要將二進制文件的位置設置爲用戶在特定的程序安裝中定義的配置值。或者,更簡單的是,只要始終將二進制文件放在最終可執行文件所在的位置,並使用「data.dat」作爲路徑。

1

一種選擇是使用環境變量來定位工具。例如,將其命名爲MYTOOLDIR。您可以在安裝MyTool時設置路徑。撥打getenv("MYTOOLDIR");可以解決此問題。

在windows上,在mytool目錄中,運行SETX PATH=%PATH%;./,或在Linux上,只需PATH=$PATH:./。 (提供一個set_env.bat或不能做的事情。)

相關問題