2012-09-18 4 views
2

실행 파일과 동일한 디렉토리에있는 일부 리소스를 사용하는 C 프로그램이 있습니다. 코드에서 사용하는 상대 경로가 실행 파일이있는 경로가 아니기 때문에 임의의 작업 디렉터리 (프로그램이있는 디렉터리가 아닌)에서 프로그램을 실행하면 리소스가로드되지 않습니다. 이 문제를 어떻게 해결할 수 있습니까?C의 상대 경로

+0

음, 절대 경로를 사용합니까? –

+1

@KingsIndian : 실행 파일이 어디에서 끝나는지 어떻게 알 수 있습니까? 소스는 exe 폴더에 상대적입니까? –

+0

글쎄, 확실히 그 대답은 그렇지만 사용자가 프로그램의 디렉토리로 변경할 수 없다. 실제 경로를 검색하는 일종의 Windows API 함수로 모든 경로를 하드 코딩하지 않는다면 ... – Jori

답변

3

인수와 중 하나로 프로그램에 자원을 포함하는 디렉토리의 경로 전달합니다

  • 변화 디렉토리에 프로세스의 현재 디렉토리 (Windows에서 유닉스에 chdir()SetCurrentDirectory()), 또는 리소스에
  • 구조 절대 경로

는 질문 sugges에 주석으로, 윈도우 인 경우 ts이면 GetModuleFileName()을 사용하여 exe의 경로를 가져올 수 있으며이 경로에서 디렉토리를 추출하고 프로그램에 인수를 제공하지 않아도됩니다. 그런 다음 두 가지 옵션 중 하나를 선택하면 프로그램을 어디서나 실행하고 리소스를 찾을 수 있습니다. 난 그냥 그랬던 것처럼 앞으로이 오래된 질문에 일이있는 사람들을위한

0

:

이 프로그램은 (적어도 리눅스에서)이 int main 인수 목록의 첫 번째 인수로 호출 된 명령을 유지합니다.

이 예제에서 두 개의 디렉토리를 아래로 드릴 다운하여 프로그램에 연결하면 다음 호출 명령 [email protected]:~$ ./foo/bar/awesome_program.x86_64이 생성됩니다.
프로그램 (아래 코드)은 ./foo/bar/awesome_program.x86_64을 인쇄합니다.
문자열을 변수로 사용하기 때문에 상대적 경로를 구성하는 것이 더 간단해야하며 해당 문자열의 끝 부분 만 실행 파일에 상대적인 경로로 대체해야합니다.

작업 코드 :

#include <stdio.h> 

int main (int argc, char **argv) 
{ 
    printf("calling path: %s\n", argv[0]); 

    return 0; 
}