C++ - Win32API 실행 파일의 full path 얻기

Win32 API의 ‘GetModuleFileName’ 함수 사용.

std::wstring getApplicationFilePath() 
{
    wchar_t fileName[MAX_PATH] = { 0 };
    ::GetModuleFileNameW(nullptr, fileName, MAX_PATH - 1);
    return fileName;
}


파일의 full path에서 실행 파일 이름만 추출하기

  • getApplicationFileName()
  • _wsplitpath_s 함수로 디렉토리와 파일 이름을 나눈다.
    • https://technet.microsoft.com/ko-kr/library/8e46eyt7(v=vs.110).aspx
std::wstring getApplicationFileName() {
    wchar_t drive[MAX_PATH];
    wchar_t dir[MAX_PATH];
    wchar_t filename[MAX_PATH];
    wchar_t ext[MAX_PATH];
    wchar_t exe_filename[MAX_PATH];

    auto filePath = getApplicationFilePath();
    ::_wsplitpath_s(filePath.c_str(),
        drive,
        MAX_PATH,
        dir,
        MAX_PATH,
        filename,
        MAX_PATH,
        ext,
        MAX_PATH);
    ::_wmakepath_s(exe_filename, MAX_PATH, nullptr, nullptr, filename, ext);
    return filename;
}

_makepath_s : full path 문자열을 만든다

_makepath_s( path_buffer, _MAX_PATH, "c", "\\sample\\crt\\",  
                      "crt_makepath_s", "c" );  

결과

 
c:\sample\crt\crt_makepath_s.c


_splitpath_s : full path 문자열에서 드라이브, 디렉토리, 파일이름, 확장자를 추출한다.

_splitpath_s( path_buffer, drive, _MAX_DRIVE, dir, _MAX_DIR, fname,  
                       _MAX_FNAME, ext, _MAX_EXT );  

결과

 
Drive: c:  
Dir: \sample\crt\  
Filename: crt_makepath_s  
Ext: .c  

이 글은 2020-01-28에 작성되었습니다.