在开发过程中经常需要获得程序当前的运行目录,这时就可以使用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声明如下:
WINBASEAPIDWORDWINAPIGetModuleFileNameA( __in_opt HMODULE hModule, __out_ecount_part(nSize, return + 1) LPCH lpFilename, __inDWORD nSize );WINBASEAPIDWORDWINAPIGetModuleFileNameW( __in_opt HMODULE hModule, __out_ecount_part(nSize, return + 1) LPWCH lpFilename, __inDWORD nSize );#ifdef UNICODE#define GetModuleFileName GetModuleFileNameW#else#define GetModuleFileName GetModuleFileNameA#endif // !UNICODE
hModule是模块的句柄,或者设置为NULL表示当前模块。lpFilename是保存路径的缓冲区。nSize是缓冲区的大小。 调用函数的例子如下:
//获取当前程序所在路径。 //蔡军生 /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
如果觉得《C++中用 GetModuleFileName()函数 获得程序当前的运行目录》对你有帮助,请点赞、收藏,并留下你的观点哦!