zoukankan      html  css  js  c++  java
  • 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;  
      }  

  • 相关阅读:
    Linux安装zookeeper以及部署dubbo-admin
    springboot+layui+mybatis-plus的批量删除(批量修改)
    springboot打包jar与war包
    drf-books系列接口作业和分页器
    drf-过滤排序异常处理封装Response对象
    drf-认证权限频率
    drf-路由组件
    视图组件
    请求和响应
    Serializer和ModelSerializer
  • 原文地址:https://www.cnblogs.com/cnLiou/p/1445800.html
Copyright © 2011-2022 走看看