C++中用 GetModuleFileName()函数 获得程序当前的运行目录


在开发过程中经常需要获得程序当前的运行目录,这时就可以使用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


你可能感兴趣的:(C++中用 GetModuleFileName()函数 获得程序当前的运行目录)