Windows 프로그램에서 실행파일 자신의 절대경로, 파일명, 확장자를 제외한 파일명 구하기입니다.
간단하게 void fnGetFileName(void); 라고 선언한 함수에 구현해 보겠습니다.
간단하게 void fnGetFileName(void); 라고 선언한 함수에 구현해 보겠습니다.
void fnGetFileName()
{
TCHAR FullPath[260];
TCHAR FileName[260];
//절대경로를 얻어옵니다.
GetModuleFileName(NULL, FullPath, 260);
//파일명을 얻어옵니다. ex)filename.exe
GetFileTitle(FullPath, FileName, 260);
//아래는 확장자를 제외한 파일명 얻기입니다. (저질코드;;)
for(int i = strlen(FileName); i > 0; i--)
{
if(FileName[i] == '.')
{
FileName[i] = 0;
}
}
}
HS님이 알려주신 _splitpath 방법으로 아래와 같이 구현할 수도 있겠습니다.
void fnGetFileName()
{
TCHAR FullPath[260];
TCHAR FileName[260];
TCHAR BaseFileName[260];
//절대 경로를 얻어옵니다.
GetModuleFileName(NULL, FullPath, 260);
//파일명을 얻어옵니다.(확장자 포함 ex - filename.exe)
GetFileTitle(FullPath, FileName, 260);
//확장자를 제외한 파일명 얻기입니다.
_splitpath(FullPath, NULL, NULL, BaseFileName, NULL);
}
_splitpath()함수가 있는 줄 모르고 뻘짓을 했었네요;;; _splitpath의 함수 원형은
void _splitpath( const char *path, char *drive, char *dir, char *fname, char *ext );입니다.
path - Full path (절대경로)
drive - Drive (드라이브)
dir - directory path (절대경로에서 드라이브와 파일명을 제외한 경로)
fname - Base filename (확장자를 제외한 파일명)
ext - filename extension (확장자)
필요없는 부분은 NULL로 주면 됩니다.
GetFileTitle을 이용하지 않고 _splitpath()를 이용하여 확장자 포함 파일명을 구해올 수도 있겠군요.