C++程序获取运行程序路径

C++程序获取运行程序路径

文章目录

代码

#include <stdio.h> 
#include <string.h>
#include <string>
#include <iostream>

using namespace std;

string getAppPath(char *argv0)
{
	string result = "";
#ifdef WIN32
	FILE *fl = popen("chdir", "r");
	string slash = "\\";
#else
#ifdef linux
	FILE *fl = popen("pwd", "r");
	string slash = "/";
#endif
#endif
	char workspace[256];
	int len = fread(workspace, 1, 256, fl);
	pclose(fl);
	workspace[len-1] = '\0';
#ifdef WIN32
	if(strchr(argv0, ':'))
	{
		result = string(argv0);
	}
#else
#ifdef linux
	if(argv0[0] == '/')
	{
		result = string(argv0);
	}
#endif
#endif
	else
	{
		result = string(workspace)+slash+string(argv0);
	}
	int t;
	while((t=result.find(slash+"."+slash)) != -1)
	{
		result.replace(t, 3, slash);
	}
	while((t=result.find(slash+".."+slash)) != -1)
	{
		int ft = result.rfind(slash, t-1);
		result.replace(ft, t-ft+3, "");
	}
	while((t=result.find(slash+slash)) != -1)
	{
		result.replace(t, 2, slash);
	}
	return result;
}

int main(int argc, char *argv[])
{	
	cout<<getAppPath(argv[0])<<endl;
	return 0;
}

windows和linux都能用

一些解释

#ifdef是预处理,我用来判断编译器是windows系统还是linux系统。因为编译器在编译时就会自动预定义一些宏:如果是windows系统,编译器会定义一个WIN32,而不会定义linux;如果是linux系统,编译器会定义一个linux而不会定义WIN32。所以只需要判断编译器预定义了WIN32还是linux就可以判断操作系统了。
程序的原理是,先用终端获取到当前目录,然后如果C++程序的argv[0]不是全路径,则返回当前目录+斜杠+argv[0],当然返回前还要规范一下,比如点斜杠这种要去掉;如果argv[0]是全路径,这直接返回argv[0]即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值