본문 바로가기
프레임워크/MFC

[MFC] 현재 실행파일의 경로 가져오기 (GetModuleFileName, _wsplitpath)

by 연어바케트 2022. 11. 23.
반응형

현재 실행되고 있는 파일에 실행경로를 받아와서

처리하고 싶은 일이 생겨 찾아보니 아래 두 함수를 이용하면 된다.

 

1. GetModuleFileName 원형 

DWORD GetModuleFileNameA(
  [in, optional] HMODULE hModule, //NULL 이면 현재 프로세스
  [out]          LPSTR   lpFilename, //경로를 받는 버퍼
  [in]           DWORD   nSize   //버퍼의 크기
);

2. GetModuleFileName 사용방법

CString strExeFileName;
GetModuleFileName(NULL, strExeFileName.GetBuffer(_MAX_PATH), _MAX_PATH);
strExeFileName.ReleaseBuffer();

  - 현재 실행중인 exe 파일의 경로를 받아오기 위해서 첫번째 매개변수는 NULL을 사용하였다. 

 

3. _wsplitpath원형

void _wsplitpath(
   const wchar_t *path, // 전체 경로 
   wchar_t *drive, //드라이브(ex. C:, D:) 드라이브가 필요하지 않으면 NULL
   wchar_t *dir, // 디렉토리 경로 필요없을 경우 NULL
   wchar_t *fname, //기본 파일이름 (확장자명 X) 필요없을 경우 NULL 
   wchar_t *ext //파일 확장자명 필요없을 경우 NULL
);

4. _wsplitpath사용방법

TCHAR drive[_MAX_DRIVE];
TCHAR path[_MAX_PATH];
TCHAR filename[_MAX_FNAME];
TCHAR ext[_MAX_EXT];
_wsplitpath(strExeFileName, drive, path, filename, ext);

5. 전체 코드 

CString strExeFileName;
GetModuleFileName(NULL, strExeFileName.GetBuffer(_MAX_PATH), _MAX_PATH);
strExeFileName.ReleaseBuffer();

TCHAR drive[_MAX_DRIVE];
TCHAR path[_MAX_PATH];
TCHAR filename[_MAX_FNAME];
TCHAR ext[_MAX_EXT];
_wsplitpath_s(strExeFileName, drive, path, filename, ext);
strExeFileName.Format(_T("%s%sCommonProgressBar.exe"), drive, path);

6. 실행화면

 

참고 

https://learn.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-getmodulefilenamea

 

GetModuleFileNameA function (libloaderapi.h) - Win32 apps

Retrieves the fully qualified path for the file that contains the specified module. The module must have been loaded by the current process. (ANSI)

learn.microsoft.com

https://learn.microsoft.com/ko-kr/cpp/c-runtime-library/reference/splitpath-wsplitpath?view=msvc-170 

 

_splitpath, _wsplitpath

자세한 정보: _splitpath, _wsplitpath

learn.microsoft.com

반응형

댓글