2014-02-15 36 views
0

我必須在某些cpp文件中設置配置文件的路徑,這些文件位於不同的目錄中。 有時它`要求路徑:查找具有篩選器路徑的文件

readFromFile("../Config/config.cfg"); 

還有一次,它單曲要求:

readFromFile("../../Config/config.cfg"); 

是否有可能作出這樣的:?

readFromFile("../*/Config/config.cfg"); 

它`不加工。如何解決它? 首先,我必須設置「../」從基本目錄出去。

例如

+proj 
|--+conf (dir) 
| |--conf.cfg 
|--+src (dir) 
| |--A.cpp 
| |--X.cpp 
|--+test (dir) 
| |--+make (dir) 
| | |--B.cpp 

代碼A.cpp和B.cpp正在調用X.cpp,其中配置文件的路徑是例如, 「../conf/conf.cfg」 對於A.cpp it s ok, but B.cpp can找到「conf」目錄。

1) compiling: 
g++ ../SourceFiles/DBHandler.cpp ../SourceFiles/ParamServer.cpp ../SourceFiles/Functions.cpp ../SourceFiles/Main.cpp -o main && ./main 
2) not compiling because of the wrong paths in DBHandler: 
g++ ../../SourceFiles/Functions.cpp ../../SourceFiles/DBHandler.cpp ../DBHandlerTestSuite.cpp -o main && ./main 

問題的DBHandlerTestSuite.cpp有調用從DBHandler靜態方法(單)。 請注意'../'和'../../'。

回答

0

「當前目錄」與cpp文件的路徑無關。在編譯和鏈接之後,會得到一個可執行文件,而「當前目錄」與運行可執行文件的位置相關。

例如:在src /中有兩個文件,a.cp​​p和b.cpp。你編譯他們到A.EXE,在斌/

+proj 
|--+src 
| |--a.cpp 
| |--b.cpp 
|--+bin 
| |--a.exe 

,我這樣做是爲了執行A.EXE:

cd <some dir>\proj\bin 
a.exe 

然後,當前目錄是<some dir>\proj\bin


那麼,你需要給X.cpp關於路徑。例如:

// X.cpp 
void foo(const std::string &confpath) 
{ 
    std::string conf = confpath + "conf.cfg"; 
    readFromFile(conf.c_str()); 
} 

// A.cpp 
foo("../conf"); 

// B.cpp 
foo("../../conf"); 

不是函數的參數,你可以使用全局變量,或初始化函數,如InitializeXcpp(const std::string &confpath);。 (對於cource,init函數應該將confpath存儲到X.cpp的靜態全局變量中。)

+0

我編輯了一些問題。 – andrew

+0

@andrew這不是問題;無論.cpp在哪裏,「當前目錄」都不會改變。 B.cpp是不是用A.cpp和X.cpp編譯的? – ikh

+0

@andrew請向我展示編譯後的二進制文件的路徑... – ikh