C语言下自定义的pathTool工具

路径操作工具(C语言)

pathTool.h
1、GetCurrentPath():获取当前程序所在路径(绝对路径+程序名)
2、GetProgramName():获取当前程序名
3、GetCurrentFolderPath:获取当前程序相对路径(绝对路径+不包含程序名)

/*
	时间:2020-2-12 ->修复了获取当前路径偶尔出现的BUG,原因是GetProgramName函数中有内存没有初始化 
*/
#define uint unsigned int
#include<cstring>

// 获取字符串实际字符长度  
uint GetStringLength(char *str)
{
	uint length = 0;
	while(str[length] != '\0')length++;
	return length; //返回字符串的有效字符长度 
}

// 获取当前程序所在路径(绝对路径) 
char * GetCurrentPath()
{
	char *buffer = (char *)malloc(sizeof(char) * MAX_PATH);
	GetModuleFileName(NULL,buffer,MAX_PATH);//该函数获取本程序路径
	return buffer;
	//char * path = GetCurrentPath(); //接收后
	//free(path); //记得释放内存
}

//获取当前程序名 
char *GetProgramName()
{
	//先获取绝对路径,然后检测数组大小,然后根据数组大小反向遍历知道遇到“\\”为止
	char *Path = GetCurrentPath();

	//计算路径总字符数,Path[charCount-1] //是路径程序全名的倒数第一个字符 
	int charCount = GetStringLength(Path);//这个最终是个数,访问则需要下标(个数-1) 

	//检测EXE文件名长度
	int nameLength = 0; //保存的是实际长度
	for(int i = 1;;i++)
	{
		if(Path[charCount-i] != '\\')
			nameLength++;
		else
			break;
	}
	//获取文件名 
	char *pName = (char *)malloc(sizeof(char) * (nameLength+1));
	memset(pName, 0, nameLength+1);
	for(int i = 1; i <= nameLength;i++){
		pName[nameLength-i] = Path[charCount-i];
	}

	free(Path);
	return pName;
	//free(pName);
}

// 获取当前程序相对路径(不包含程序名)
char *GetCurrentFolderPath()
{
	//获取路径总字符数[重要] 
	char *Path = GetCurrentPath();
	
	int pathCount = 0;
	for(int i = 0;;i++) {
		if(Path[i] != '\0')
			pathCount++; //这个最终是个数,访问则需要下标(个数-1) 
		else
			break;
	}
	
	//获取程序名长度
	char *ProgramName = GetProgramName();
	int nameCount = 0;
	for(int i = 0;;i++) {
		if(ProgramName[i] != '\0')
			nameCount++; //这个最终是个数,访问则需要下标(个数-1) 
		else
			break;
	}
	
	int arrLength = pathCount - nameCount;//新路径长度 
	char *currentPath = (char *)malloc(sizeof(char) * (arrLength+1));
	memset(currentPath, 0, (arrLength+1));//先初始化此数组,防止有垃圾值 
	
	//获得相对路径
	for(int i = 1; i <= arrLength; i++){
		currentPath[arrLength-i] = Path[arrLength-i];
	}
	free(ProgramName);
	//free(currentPath);//外部释放内存 
	return currentPath;
}
//相关请参考博客:https://www.cnblogs.com/rainbow70626/p/8818791.html 

备注:在之前有一个函数,可以直接获取当前程序路径,但是这个函数其实是“有问题”的!代码:

/
	【有问题】(201991009:36:40) 
	问题:在程序设置开机启动项后,该函数获取程序当前工作路径是:C:\Window\system32
	而不是程序实际所在的路径。(可能是因为控制台程序本就由C:\Window\System32下的某个程序启动)
	
	【解决方案】
	经过测试,获取程序的绝对路径时,不会出现这种情况,但是要去掉去程序名。 
/
//功能:获取当前路径(有问题)
char * GetCurrentFolderPath() 
{
	char *buffer = (char *)malloc(sizeof(char) * MAX_PATH);
	GetCurrentDirectory(MAX_PATH,buffer);
	return buffer;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值