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

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

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

#include 

/*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;
}

虽然没用上。

你可能感兴趣的:(#,琐碎小记录,代码,c语言,其他,开发语言)