현제 실행 중인 프로세스에서 자신의 실행 위치를 알기 위해 GetCurrentDirectory를 사용한다.
아래는 함수 원형이다.
DWORD WINAPI GetCurrentDirectory(
_In_ DWORD nBufferLength,
_Out_ LPTSTR lpBuffer
);
현재 디렉토리 문자열에 대한 버퍼의 길이 TCHARs . 버퍼 길이는 널 종료 문자를위한 공간을 포함해야합니다.
현재 디렉토리 문자열을 수신 버퍼에 대한 포인터. 이 널 (null)로 종료되는 문자열은 현재 디렉토리의 절대 경로를 지정합니다.
필요한 버퍼 크기를 확인하려면이 매개 변수를 설정 NULL 과 nBufferLength의 0 매개 변수를.
해당 함수는 현제 경로를 구해오지만 SetCurrentDirectory에 의해 변경될 요지가 있어 멀티 스레드 응용 프로그램이나 공유 라이브러리 코드에 사용하기 위해서는
주의할 필요가 있다.
또한 서비스 같은 응용 프로그램에서 사용하게 되면 서비스는 시스템 권한의 프로세스로 A라는 경로에서 실행 되었더라도 system32 폴더의 경로가 나오게 된다.
그 이하 자식 프로세스가 까지 그 권한이 상속 받기 때문에 주의하여서 사용해야 한다.
그래서 현제 경로를 구한다면, GetCurrentDirectory 보다 GetModuleFileName를 사용하기 권한다.
WCHAR path[100] = {0,};
GetModuleFileName(NULL, path, sizeof(path);
WCHAR *ptr = wcsrchr(path, '\\');
*ptr = '\0';