VC 取得程序所在目录的方法

如果到网上搜索VC中取得程序所在目录的函数, 大家都说是GetCurrentDirectory, 函数原型为DWORD GetCurrentDirectory(DWORD nBufferLength, LPTSTR lpBuffer); 使用简单, 直接将当前路径读到lpBuffer中, 方便快捷, 但是注意它是把当前路径读到lpBuffer中, 而未必是程序所在目录, 由于当前目录是可以通过SetCurrentDirectory修改的, 也会在弹出一个地址选择框后修改的, 所以不要寄希望于它了.

幸好我们还可以找到另一个API, 它的名字是GetModuleFileName, 函数原型为DWORD GetModuleFileName(HMODULE hModule, LPTSTR lpFilename, DWORD nSize), 该函数能直接找到当前应用程序的绝对路径, 唯一遗憾的是它不能直接得到目录路径, 我们需要对它进行简单处理, 得到程序所在目录, 以下简单代码即可实现.
 char pLocalPath[255];
 memset(pLocalPath, 0, sizeof(pLocalPath));
 GetModuleFileName(AfxGetInstanceHandle(), pLocalPath, sizeof(pLocalPath));
 pLocalPath[strrchr(pLocalPath, '\\') - pLocalPath] = '\0';
 AfxMessageBox(pLocalPath);

以下函数是网上有人写好的, 稍微复杂点:
  CString   CXXXXXXApp::GetCurDir()  
  {  
    TCHAR   sDrive[_MAX_DRIVE];  
    TCHAR   sDir[_MAX_DIR];  
    TCHAR   sFilename[_MAX_FNAME],Filename[_MAX_FNAME];  
    TCHAR   sExt[_MAX_EXT];  
    GetModuleFileName(AfxGetInstanceHandle(),   Filename,   _MAX_PATH);  
    _tsplitpath(Filename,   sDrive,   sDir,   sFilename,   sExt);  
    CString   homeDir(CString(sDrive)   +   CString(sDir));  
    int   nLen   =   homeDir.GetLength();  
    if(homeDir.GetAt(nLen-1)   !=   _T('\'))  
      homeDir   +=   _T('\');  
    return   homeDir;  
  }  

posted @ 2009-04-29 00:51  Eric-Liu  阅读(1619)  评论(1编辑  收藏  举报