用GetModuleFileName獲取程序當前執行文件名
用GetModuleFileName獲取程序當前執行文件名
在開發過程中經常需要獲得程序當前的運行目錄,這時就可以使用GetModuleFileName函數
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);
}
//==============================================================================
//==============================================================================
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是緩沖區的大小。
調用函數的例子如下:
#001 //獲取當前程序所在路徑。
#002 //蔡軍生 2007/12/05 QQ:9073204 深圳
#003 void TestGetExePath(void)
#004 {
#005 //
#006 const int nBufSize = 512;
#007 TCHAR chBuf[nBufSize];
#008 ZeroMemory(chBuf,nBufSize);
#009
#010 //獲取當前執行文件的路徑。
#011 if (GetModuleFileName(NULL,chBuf,nBufSize))
#012 {
#013 //輸出帶文件名稱路徑。
#014 OutputDebugString(chBuf);
#015 OutputDebugString(_T("\r\n"));
#016
#017 //獲取文件路徑。
#018 TCHAR* lpStrPath = chBuf;
#019 PathRemoveFileSpec(lpStrPath);
#020 OutputDebugString(lpStrPath);
#021 OutputDebugString(_T("\r\n"));
#022 }
#023
#024 }
輸出的結果如下:
g:\work\windows_api\wincpp2\debug\WinCpp.exe
g:\work\windows_api\wincpp2\debug