2011-02-23 3 views
0

다른 사람들이 사용할 수있는 클래스가 정의 된 라이브러리 또는 도구 세트를 작성한다고 가정 해 보겠습니다. tool1.cpp에서포함 된 C++ 소스에서 외부 파일의 경로를 작성하는 방법

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

내가 외부 바이너리 큰 파일 data.dat 사용 :이 같은 디렉토리 트리가 있다고 가정

ifsteam f("data.txt"); 

main1.cpp 사용 mytool을하지만, mytool.(s)omain1.o 프로그램과 연결되어있는 경우 '수 t이 을 찾으십시오.이 경우 이전 줄을 다음과 같이 변경해야합니다 :

다른 사람들이 다른 디렉토리 트리 할 수 ​​있습니다 예를 들어 mytool을 어디다 그러나 나는 알 수 없다 (? 내가 맞다) 또한

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

을 경로가 프로그램이 실행되는 위치에 따라 달라집니다.

내가 상상할 수있는 유일한 해결책은 클래스 생성자 MyTool의 경로를 data.dat 경로로 전달하는 것이지만이 파일을 사용자에게 숨기고 싶습니다.

+0

'boost :: filesystem' – AJG85

답변

1

파일의 절대 경로 또는 작업 디렉토리와 관련된 파일의 경로를 알아야합니다. 하나의 접근법은 프로그램을 컴파일하기 전에 사용자가 실행하는 구성 스크립트를 갖는 것입니다. 그런 다음 스크립트는 관련 경로를 프로그램에 하드 코드하므로 프로그램은 사용자에 맞게 사용자 정의 된 방식으로 경로가 고정되어 있습니다.

때때로 소스 코드를 배포하고 싶지 않거나 런타임에 경로가 변경되도록 허용하기 때문에 옵션이 아닙니다. 그런 다음 런타임에 파일이있는 위치를 나타내는 구성 파일을 읽을 수 있습니다. 그러나 이것은 추상화 계층에 불과합니다. 구성 파일의 위치를 ​​알아야합니다. 예를 들어, 사용자의 개인 디렉토리가 어디에 있는지 시스템에 묻고 그 디렉토리에서 파일을 찾을 수 있습니다. 이것은 경로의 컴파일 시간과 런타임 계산 사이의 일종의 혼합입니다.

0

이진 파일의 위치를 ​​프로그램의 특정 설치에서 사용자가 정의한 구성 값으로 지정해야합니다. 아니면, 더 쉽게, 그냥 항상 최종 실행 파일과 같은 장소에 이진 파일을 넣고 경로로 "data.dat"를 사용합니다.

1

하나의 옵션은 도구 위치에 환경 변수를 사용하는 것입니다. 예를 들어 이름을 MYTOOLDIR로 지정하십시오. MyTool 설치시 경로를 설정할 수 있습니다. getenv("MYTOOLDIR");을 호출하면 경로가 해결 될 수 있습니다.

Windows의 경우 mytool 디렉토리에서 SETX PATH=%PATH%;./을 실행하거나 Linux의 경우 PATH=$PATH:./을 실행하십시오. (set_env.bat 또는 이와 유사한 것을 제공하십시오.)

관련 문제