2012-03-02 3 views
0
나는이 같은 문자열 내 코드에서 이미지와 사운드 경로를 정의

다른 컴퓨터 C++에서 코드를 실행할 때 :콘텐츠 (이미지/사운드를) 찾을 수 없습니다

"그래픽 \ \ player.png"

또한 XML 파일을 통해 이미지를로드 한 후 경로는 다음과 같습니다

< 그래픽 \ tile1.png>

그래픽 폴더는 프로젝트 루트에 있고 그것이 내가에 사용하는 컴퓨터에서 완벽하게 작동 개발 중.

릴리스 빌드를 만들어 내 컴퓨터에서 실행하면 그래픽 폴더가 .exe와 같은 폴더에 있으면 제대로 작동합니다.

그러나 다른 컴퓨터에서 똑같은 것을 실행하면 이미지 나 사운드를 찾지 못합니다.

dll이 올 바르며 게임이 제대로 실행됩니다.

필자는 다양한 사양과 드라이버를 가지고 있지만 작동하지 않는 여러 대의 컴퓨터에서이를 테스트했습니다.

컴파일되지 않은 소스 코드를 다른 컴퓨터로 옮긴 다음 컴파일하면 올바르게 작동합니다.

다른 컴퓨터에서 컴파일 된 코드를 실행할 때 제 질문이 생깁니다.

+0

''Graphics \ player.png ''는 C++ 문자열 리터럴로서 유효하지 않습니다. –

+0

죄송합니다. 게시물을 입력하십시오. 그것은 "\\"C++의 "\"in xml – Orujimaru

+0

그렇다면 OS 셸을 통해 실행할 때 IDE (Visual Studio?)에서 프로그램을 실행할 때 다른 현재 디렉토리가 있다고 의심됩니다. 현재 디렉토리 경로를 표시하십시오. 당신이 가진 두 가지 상황에서 테스트하십시오. –

답변

2

상대 경로를 사용 중입니다. 이 경로가 참조하는 루트 디렉토리 어딘가에서 chdir()을 수행합니까?

즉, 상대 경로는 어디에도 사용하지 말아야합니다. 이 문제가 발생하지 않도록 시작시 절대 값을 설정하십시오. chdir()을 호출하는 제 3 자 dll이 리소스로드를 버릴 수 없습니다.

+0

으로 변환됩니다. chdir()을 호출하지 않습니다. 그렇게해야합니까? 예인 경우 어떻게 사용합니까? 절대 경로를 하드 코드하면 모든 컴퓨터에서 경로가 동일해야 작동 할 수 있습니다. 고마워, Markus – Orujimaru

+0

chdir()을 호출 할 필요가 없습니다. 당신이해야 할 일은 경로를 사용하는 모든 장소에서 그 경로가 파일 시스템상의 같은 파일로 해석되는지 확인하는 것입니다.상대 경로를 사용하기를 원한다면 경로를 사용할 때마다 올바른 최상위 디렉토리에 내 호출 chdir()을 사용할 수 있습니다. 그러나 상상할 수 있듯이 어떤 시점에서는 잊어 버릴 확률이 높습니다. 다른 곳에서 chdir을 호출하거나 사용자가 다른 디렉토리에서 프로그램을 시작하거나 100 가지 이유 중 하나가 다른 이유로 인해 잘못 될 수 있습니다. 틀리다. – Roel

+0

물론 경로를 하드 코딩해서는 안됩니다. 예를 들어 GetModuleFileName()을 사용하거나 GetSpecialFolderPath()에서 응용 프로그램의 데이터 디렉토리를 사용하거나 디렉토리 이름을 확인할 수있는 다른 방법으로 상대 경로에 데이터 디렉토리를 추가하여 런타임시 절대 경로를 절대적으로 만들어야합니다 데이터가 저장됩니다. 따라서 애플리케이션에서 리소스를 구성하는 방법에 따라 애플리케이션을 정확하게 수행하는 방법이 달라집니다. – Roel

1

문자열을 출력하고 프로그램을 실행하는 곳에서 정확한 문자열을 열어보십시오.

바탕 화면에서 프로그램을 실행하는 경우와 실제 위치를 기준으로 상대 경로를 사용하려고 시도하는 경우에는 작동하지 않을 것이므로 상대 경로를 사용합니다 에서 실행됩니다.이 경우 절대 경로를 사용하십시오.

관련 문제