• 作者: 丶布布


文章预览:

  • 💦 获取工程路径
  • 💦 获取解决方案路径
  • 💦 可执行文件路径
  • 💦 返回不带有可执行文件名的路径
  • 💦 总结



💦 获取工程路径

法一:

TCHAR pBuf[MAX_PATH];                     //存放路径的变量
GetCurrentDirectory(MAX_PATH, pBuf);      //获取程序的当前目录

法二:支持VS2015以上版本

#include <direct.h>

char *path = NULL;
path = _getcwd(NULL, 1);
puts(path);
delete path;
path = nullptr;

结果:

[C++] 获取工程路径、解决方案路径和.exe路径_VS2015

💦 获取解决方案路径

#include <direct.h>

char *path = NULL;
path = _getcwd(NULL, 1);
puts(path);

std::string str1(path);
int pos = str1.find_last_of('\\', str1.length());
std::string solutionDir = str1.substr(0, pos);  // 返回解决方案的路径

delete path;
path = nullptr;

💦 可执行文件路径

QString strCurPath;
TCHAR szPhotoPath[MAX_PATH];
GetModuleFileName(NULL, szPhotoPath, sizeof(szPhotoPath));

结果:

[C++] 获取工程路径、解决方案路径和.exe路径_C++_02

💦 返回不带有可执行文件名的路径

std::string VisionTestFrame::GetProgramDir()
{
	TCHAR exeFullPath[MAX_PATH]; // Full path
	std::string strPath = "";

	GetModuleFileName(NULL, exeFullPath, MAX_PATH); //获取带有可执行文件名路径
	strPath = TCHAR2STRING(exeFullPath);
	int pos = strPath.find_last_of('\\', strPath.length());
	return strPath.substr(0, pos);  // 返回不带有可执行文件名的路径
}
//TCHAR类型转string类型函数
std::string TCHAR2STRING(TCHAR *STR)
{
	int iLen = WideCharToMultiByte(CP_ACP, 0, STR, -1, NULL, 0, NULL, NULL);
	char* chRtn = new char[iLen * sizeof(char)];
	WideCharToMultiByte(CP_ACP, 0, STR, -1, chRtn, iLen, NULL, NULL);
	std::string str(chRtn);
	return str;
}
int main()
{
	std::string str = GetProgramDir(); //获取不带有可执行文件名的路径
}

结果:

[C++] 获取工程路径、解决方案路径和.exe路径_可执行_03

💦 总结

其实我们首先获取解决方案目录,然后通过在解决方案目录后手动添加项目里的子文件夹路径名,就可随意获取整个项目中文中的任何文件或文件夹路径名了。例,我想获得解决方案路径下的task文件夹路径:

char *path = NULL;
path = _getcwd(NULL, 1);
puts(path);

std::string str1(path);
int pos = str1.find_last_of('\\', str1.length());
std::string solutionDir = str1.substr(0, pos);  // 返回解决方案的路径

m_inParam.m_paramName = QString::fromStdString(solutionDir) +"\\task";   
delete path;
path = nullptr;

结果:

[C++] 获取工程路径、解决方案路径和.exe路径_C++_04


叮~~~~~~~~~~~~~~结束。


戳戳小手帮忙点个免费的赞和关注吧,嘿嘿。