• 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;  
      }  

  • 相关阅读:
    Mongodb复制集配置
    Alluxio部署(集群模式)
    【性能-windows端口限制】TPS上不去,应用无压力只有cpu5%,tomcat线程最高1500,增大并发出现connect 报错
    SQL优化(三)—— 索引、explain分析
    vbs,修改文件名
    Fiddler的详细介绍
    Fiddler 抓包工具总结
    从零开始学习jQuery (一) 开天辟地入门篇
    Jmeter关联之正则表达式提取器(完整版)
    Jmeter实现百分比业务比例
  • 原文地址:https://www.cnblogs.com/cnLiou/p/1445800.html
Copyright © 2020-2023  润新知