获取当前目录的绝对路径(包含Linux和Windows)

本文介绍了一个C++函数,用于在Windows和Linux环境下获取应用程序的执行目录路径。Windows使用GetModuleFileNameA,Linux则通过readlink获取并处理/proc/self/exe。
摘要由CSDN通过智能技术生成

1 代码

/*
	.h声明
*/

#ifdef _WIN32
/*
    Windows获取.exe所在的目录路径
*/
std::string GetAppPathA();
#else
/*
    Linux下利用readlink获取可执行程序的当前目录路径,但最后会重复最后目录的名字,proc/self/exe为符号链接;
 参1为存放目录路径缓冲区大小,参2为缓冲区长度,参3为传出的路径;
*/
bool GetAppPathA(char* processdir, size_t len, string &excuDir);
#endif


/*
	.cpp
*/
#ifdef _WIN32
std::string InputVideoInfo::GetAppPathA() {
	char szFilePath[MAX_PATH] = { 0 };
	char szDrive[MAX_PATH] = { 0 };
	char szDir[MAX_PATH] = { 0 };
	char szFileName[MAX_PATH] = { 0 };
	char szExt[MAX_PATH] = { 0 };
	GetModuleFileNameA(NULL, szFilePath, sizeof(szFilePath));//获取当前执行文件.exe的路径(D:\x\x\a.exe)
	_splitpath_s(szFilePath, szDrive, szDir, szFileName, szExt);//分割文件.1:路径;2:盘符(D:);3:目录(\x\x\);4:文件名;5:后缀

	//去掉文件名(a.exe)
	std::string str(szDrive);
	str.append(szDir);

	return str;
}
#else
bool InputVideoInfo::GetAppPathA(char* processdir, size_t len, string &excuDir){

	string p;
	int pos;
	p.clear();
	memset(processdir,0x00,len);
	excuDir.clear();
	size_t s = readlink("/proc/self/exe", processdir, len);
    if(s <= 0){
        return false;
    }
	//printf("get current path is :%s\n", processdir);//processdir = /xxx/main/main
    p = processdir;
	pos = p.find_last_of('/');
	if(std::string::npos == pos){
		return false;
	}
	excuDir = p.substr(0, pos + 1);//去除/xxx/main/main的main,得到可执行程序的目录
    return true;
}
#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值