Location | Tag | Media  ||  A | P

현재 실행파일의 경로와 파일명 알아내기

종종 현재 실행중인 실행파일 자신의 경로와 관련된 파일명을 알아내야 할 때가 있다. 특히 외부 리소스를 사용하게 되면 실행파일이 들어있는 폴더 아래에 외부 리소스를 담는 폴더를 만들어 사용하게 된다. 만일 프로그램이 원래 프로그래머가 지정한대로 설치되면 좋겠지만 사용자는 임의의 경로에 설치하거나 파일명을 마음대로 바꾸는 경우도 있어서 문제가 된다. 그리고 몇몇 API 함수들은 파일 경로를 반드시 절대 경로로만 써줘야 하는 경우가 많다. 따라서 이럴때엔 다음의 두 함수를 사용한다.

 

TCHAR pszPathName[_MAX_PATH] 
::GetModuleFileName(::AfxGetInstanceHandle(), pszPathName, _MAX_PATH);
PathRemoveFileSpec(pszPathName);


 

여기서 GetModuleFileName은 프로그램의 인스턴스 핸들 구조체로부터 프로그램 자신의 실행 경로(드라이브, 폴더, 파일명과 확장자까지 들어가 있는  완전한 경로)를 얻어와 이를 pszPathName에 삽입하게 된다.

그리고 PathRemoveFileSpec은 이렇게 얻어온 파일 경로에서 파일명과 확장자를 떼어낸 폴더 경로만을 얻을수 있도록 해준다. 단 이 함수를 사용할 때에는 shlwapi.lib 를 프로젝트 설정이나 comment 전처리기를 사용하여 링크 시켜주고 stdafx,h에 shlwapi.h를 삽입해야 한다.

또한 이 외에도 두 함수가 인자로 받는 buffer의 크기는 _MAX_PATH 이어야만 한다.

Posted by Bestend
: