2014-02-15 3 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의 경우 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)를 호출하고 있습니다. '../'및 '../../'에 유의하십시오.

답변

0

"현재 디렉토리"는 cpp 파일의 경로와 관계가 없습니다. 컴파일하고 링크 한 후에 실행 파일을 얻으며 "현재 디렉토리"는 실행 파일을 실행하는 위치와 관련됩니다.

예 : src /에 a.cpp와 b.cpp라는 두 개의 파일이 있습니다. 그리고 당신은

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

/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); 글로벌 변수 또는 초기화 기능을 사용할 수 있습니다. (C 소스 중 init 함수는 X.cpp의 정적 전역 변수에 대한 confpath를 저장해야합니다.)

+0

나는 약간의 질문을 편집했다. – andrew

+0

@andrew 문제가되지 않습니다. .cpp가 어디에 있든 "현재 디렉터리"는 변경되지 않습니다. B.cpp가 A.cpp 및 X.cpp로 컴파일되지 않습니까? – ikh

+0

@andrew 컴파일 된 바이너리 경로를 보여주세요 ... – ikh

관련 문제