(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 }
总体来说,没有什么技巧,记住写法就可以了。
没有坚守就没有事业,没有执着就没有未来!
浙公网安备 33010602011771号