使用过滤器路径查找文件

时间:2014-02-15 00:14:53

标签: c++ readfile

我必须在一些位于不同目录的cpp文件中设置配置文件的路径。 有时它需要这条路径:

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

另一次需要:

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

是否可以制作类似的东西?:

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

它不起作用。怎么解决? 首先,我必须设置“../”从基本目录出去。

e.g。

+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,它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调用静态方法(singleton)。 请注意'../'和'../../'。

1 个答案:

答案 0 :(得分:0)

“当前目录”与cpp文件的路径无关..编译和链接后,您将获得一个可执行文件,“当前目录”与您运行可执行文件的位置有关。

例如:你在src /中有两个文件,a.cp​​p和b.cpp。然后在bin /

中将它们编译成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");

您可以使用全局变量或init函数(例如InitializeXcpp(const std::string &confpath);)来代替函数参数。 (对于cource,init函数应该将confpath存储到X.cpp的静态全局变量。)