在开发过程中经常需要获得程序当前的运行目录,这时就可以使用GetModuleFileNam
DWORD WINAPI GetModuleFileName(
HMODULE hModule,
LPTSTR lpFileName,
DWORD nSize
);
hModule:要获取文件名的模块名柄,null表示当前模块
lpFileName:输出参数,存放取得的文件名
nSize:lpFileName参数的长度
例
void FileName()
{
TCHAR lpFileName[MAX_PATH];
::GetModuleFileName(null, lpFileName, MAX_PATH);
SetDlgItemText(IDC_TEXTBOX, lpFileName);
}
在开发软件的过程里,经常需要把数据保存到当前执行文件路径下面,或者读取当前执行文件路径下的一些配置信息。这时就需要从当前模块里获取所在的目录路径,以便进行固定的位置操作文件。要解决这个需求,就需要调用
API
函数
GetModuleFileName
来获取模块所在的路径。
函数GetModuleFileName声明如下:
WINBASEAPI
DWORD
WINAPI
GetModuleFileNameA(
__in_opt HMODULE hModule,
__out_ecount_part(nSize, return + 1) LPCH lpFilename,
__in DWORD nSize
);
WINBASEAPI
DWORD
WINAPI
GetModuleFileNameW(
__in_opt HMODULE hModule,
__out_ecount_part(nSize, return + 1) LPWCH lpFilename,
__in DWORD nSize
);
#ifdef UNICODE
#define GetModuleFileName GetModuleFileNameW
#else
#define GetModuleFileName GetModuleFileNameA
#endif // !UNICODE
hModule是模块的句柄,或者设置为NULL表示当前模块。
lpFilename是保存路径的缓冲区。
nSize是缓冲区的大小。
调用函数的例子如下:
//获取当前程序所在路径。
//蔡军生 2007/12/05 QQ:9073204 深圳
void TestGetExePath(void)
{
//
const int nBufSize = 512;
TCHAR chBuf[nBufSize];
ZeroMemory(chBuf,nBufSize);
//获取当前执行文件的路径。
if (GetModuleFileName(NULL,chBuf,nBufSize))
{
//输出带文件名称路径。
OutputDebugString(chBuf);
OutputDebugString(_T("\r\n"));
//获取文件路径。
TCHAR* lpStrPath = chBuf;
PathRemoveFileSpec(lpStrPath);
OutputDebugString(lpStrPath);
OutputDebugString(_T("\r\n"));
}
}
输出的结果如下:
g:\work\windows_api\wincpp2\debug\WinCpp.exe
g:\work\windows_api\wincpp2\debug