(2)VS C++获取exe文件执行路径

1.  获取程序工作空间的路径:

1 #include  <direct.h>
2 #include  <stdio.h>
3  char   buffer[MAX_PATH]; 
4  getcwd(buffer, MAX_PATH);   
5  printf( "The   current   directory   is:   %s ",   buffer);   //打印出E:/C++/cppTest/cppPrimerTest
6 
7 //已测试可行,程序的工作控件可在VS的属性里设置,这里工作目录即获取到的路径(设置成 $(TargetDir)  )

 或者使用一下接口
  char pBuf[MAX_PATH];
  GetCurrentDirectory(MAX_PATH,pBuf);

2. 获取可执行文件名称(包含路径)

1 #include <windows.h>
2 char chpath[MAX_PATH];
3 GetModuleFileName(NULL,(LPSTR)chpath,sizeof(chpath));
4 std::cout<<chpath<<std::endl; //打印出:E:/C++/cppTest/cppPrimerTest/Debug/cppTest.exe

3.一个读取.ini文件获取参数的实例

  下面贴上项目的配置文件截图以及配套自己写的代码:

 1 void CMQService::InitMQueParameter()
 2 {
 3     char szPath[MAX_PATH] = { 0 };
 4     ::GetModuleFileName(NULL, szPath, sizeof(szPath) - 1);
 5     string strExePath = szPath;
 6     string strCfgFile = _T("\\IbmMqCfg.ini");
 7     size_t posRm = strExePath.find_last_of("\\");
 8     strExePath.erase(posRm);
 9     memset(szPath, 0, MAX_PATH);
10     memcpy(szPath, strExePath.c_str(), strExePath.length());
11     memcpy(szPath + strExePath.length(), strCfgFile.c_str(), strCfgFile.length());
12 
13     //Init MQ
14     char szBuf_1[MQ_PARAM_MAX_LEN] = _T("");
15     char szBuf_2[MQ_PARAM_MAX_LEN] = _T("");
16     GetPrivateProfileString(_T("MQSENDER"), _T("MQ1"), _T(""), szBuf_2, MQ_PARAM_MAX_LEN, szPath);
17     if (szBuf_2 != _T("")){
18         GetPrivateProfileString(_T("MQCONNLIST"), szBuf_2, _T(""), szBuf_1, MQ_PARAM_MAX_LEN, szPath);
19     }
3.     tuple<string, string, string> tpConValue = GetMQElement(szBuf_1);
21     strcpy_s(m_strQueMgr, std::get<0>(tpConValue).c_str());
22     strcpy_s(m_strChannel, std::get<1>(tpConValue).c_str());
23     strcpy_s(m_strLinkInfo, std::get<2>(tpConValue).c_str());
24 
25     GetPrivateProfileString(_T("MQLISTENER"), _T("MQ1"), _T(""), szBuf_1, MQ_PARAM_MAX_LEN, szPath);
26     tpConValue = GetMQElement(szBuf_1);
27     strcpy_s(m_strLisMqName, std::get<1>(tpConValue).c_str());
28     strcpy_s(m_strTCSXId, std::get<2>(tpConValue).c_str());
29 
30     GetPrivateProfileString(_T("MQMSGPARAM"), _T("MSGID"), _T(""), m_strMsgId, MQ_PARAM_MAX_LEN, szPath);
31 
32     SetItemQueName(TX406, szPath);
33     SetItemQueName(TX105, szPath);
34     SetItemQueName(TX016, szPath);
35     SetItemQueName(TX031, szPath);
36     SetItemQueName(TX125, szPath);
37     SetItemQueName(TX117, szPath);
38     SetItemQueName(TX0EQ, szPath);
39 }

   总体来说,没有什么技巧,记住写法就可以了。

posted @ 2018-06-24 11:42  傍风无意  阅读(2302)  评论(0)    收藏  举报