【记录】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;
}
虽然没用上。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix