VC 取得程序所在目录的方法
首页 > 技术交流   作者:孟关伦  2015年3月6日 21:52 星期五  热度:1645°  字号:   评论:0 条
时间:2015-3-6 21:52   热度:1645°  评论:0 条 

孟关伦到网上搜索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;   
  }  

 您阅读这篇文章共花了: 
二维码加载中...
本文作者:孟关伦      文章标题: VC 取得程序所在目录的方法
本文地址:http://www.mengguanlun99.com/post-112.html
版权声明:若无注明,本文皆为“孟关伦博客”原创,转载请保留文章出处。