프레임워크/MFC
[MFC] 현재 실행파일의 경로 가져오기 (GetModuleFileName, _wsplitpath)
연어바케트
2022. 11. 23. 16:00
반응형
현재 실행되고 있는 파일에 실행경로를 받아와서
처리하고 싶은 일이 생겨 찾아보니 아래 두 함수를 이용하면 된다.
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
반응형