2011-02-23 5 views
0

C++ 프로그램을 작성하고이를 c : \ my_app에 배포했으며 실행 파일의 경로는 c : \ my_app \ my_app.exe입니다. 예를 들어, my_app에는 c : \ my_app \ the_file.txt에있는 the_file.txt와 같은 많은 파일이 필요합니다.배포 된 win32 응용 프로그램의 상대 경로 문제

내 실행 파일에서 xx.open ("the_file.txt")과 같이 txt 파일을 엽니 다.

또한 내 프로그램과 .myp 확장자를 연결해 두었습니다.

데스크톱에 있고 example.myp라는 파일을 열 때 내 프로그램은 the_file.txt를 볼 수 없습니다. 왜냐하면 (어떤 식 으로든) 현재 데스크톱에서 작업하고 있다고 가정하기 때문입니다.

HKEY_CLASSES_ROOT에서 열린 쉘 명령을 변경하여이 문제를 쉽게 해결할 수 있습니까? 순진한 해결책은 "% my_app_location/the_file.txt"와 같은 것으로 파일 열기 작업을 모두 변경하는 것입니다. 나는 그것을하고 싶지 않다.

도움 주셔서 감사합니다.

답변

5

항상은 파일을 열 때 전체 경로 이름을 사용합니다. 즉, "foo.txt"를 열지 않고 "c : \ bar \ foo.txt"를 엽니 다. EXE의 설치 디렉토리를 찾으려면 GetModuleFileName()을 사용하고 모듈 핸들에 NULL을 전달하십시오.

0

앱 폴더의 현재 디렉토리를 SetCurrentDirectory 기능으로 설정해야합니다. 그 후 전체 경로없이 이름으로 파일을 열 수 있습니다

1

요즘에는 c : \ my_app ....에 파일을 추가하면 안됩니다. 대신 ProgramData 폴더와 전체 경로를 사용하십시오.

CSIDL_COMMON_APPDATA와 함께 SHGetSpecialFolderPathA를 사용하여 ProgramData 폴더를 만들고 프로그램 디렉터리를 만들고 파일을 추가하십시오.