【记录】C语言|获取其他文件的绝对路径转为相对路径的两种代码

GetModuleFileName获取当前程序的绝对路径。然后对比再strcat之类的。

只能获得同一盘符下的相对路径:

#include <string.h>

/*pa是绝对路径,relPath用于存放相对路径*/
bool AbsPath2RelPath(char* pa, char* relPath)
{
	char sCurrentDir[256];
	GetModuleFileName(NULL, sCurrentDir, sizeof(sCurrentDir));
	char* p = strrchr(sCurrentDir, '\\');
	*(p+1) = 0;
	char* p = sCurrentDir;
	
	char pat[256];
	strcpy(pat, pa);//防止原路径被改变
	char* path = pat;
	strcpy(relPath,"");
	const char token[10] = "..\\";
	int count,i;
	for (i=1; *path && *p && (*path == *p) && strrchr(path, '\\'); ++path, ++p)
		if(*path=='\\'&&*p==*path)i=0;
	if (i)
	{
		//查找失败
		return false;
	}
	char* pTemp; count = 0;
	while (pTemp=strrchr(p, '\\')) {
		*pTemp = 0;
		strcat(relPath, token);
	}
	strcat(relPath, path);
	return true;
}

同一文件夹(简化版):

/*pa是绝对路径,relPath用于存放相对路径*/
bool AbsPath2RelPath(char* pa, char* relPath)
{
	char sCurrentDir[256];
	GetModuleFileName(NULL, sCurrentDir, sizeof(sCurrentDir));
	char* p = strrchr(sCurrentDir, '\\');
	*(p+1) = 0;
	char* p = sCurrentDir;
	
	char pat[256];
	strcpy(pat, pa);//防止原路径被改变
	char* path = pat;
	strcpy(relPath,"");
	const char token[10] = "..\\";
	int count;
	for (;*path && *p && (*path == *p) && strrchr(path, '\\'); ++path, ++p);
	if (*p)
	{
		//查找失败
		return false;
	}
	strcat(relPath, path);
	return true;
}

虽然没用上。

posted @   shandianchengzi  阅读(24)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示