GetModuleFileName获取当前程序的绝对路径。然后对比再strcat之类的。
只能获得同一盘符下的相对路径:
#includebool 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; }
同一文件夹(简化版):
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;
}
虽然没用上。



