将Mac和Linux上的相对路径转换为绝对路径
Converting a relative path to absolute on Mac and Linux
这就是我想要实现的:
CString r = CDir("/users/administrator/path/3/4/5").absolutePathFor("../../2/../3/");
r
现在应该包含"/users/administrator/path/3/3/"
在Windows上,这是通过GetFullPathName
完成的。在Linux和Mac上,有一个简单的C函数realpath()
几乎可以解决这个问题。然而,它有一个巨大的问题:它似乎只适用于实际存在的路径。在我的示例中,路径的某些部分不存在,并且该部分是从realpath
返回的结果中截断的。Mac和Linux上还有什么其他功能可以解决我的任务?
你的意思是即使路径不存在(所以你不能问操作系统),你也想计算路径是什么?
在这种情况下,我想你可以创建一个函数,将当前目录参数和相对路径作为参数。然后检查每个//之间有什么。如果是"。",你忽略它,如果是"..",你从当前路径中删除最后一个目录,如果是其他目录,你把它添加到当前路径中。
实现它的一个好方法是为路径(push/pop)使用堆栈,为相对路径使用队列。将字符串转换成这个应该很容易。例如(用于创建基本路径)
我假设BasePath是路径
的输入字符串参数std::stack<string>path;
string temp;
for (int i=0;i<BasePath.size()
if(BasePath[i]!='/')
temp+=BasePath[i];
else
path.push(temp), temp.clear();
这是相当丑陋的,可以用正则表达式完成,但既然你说你没有Boost,我也假设你没有c++ 11,因为这种复杂性,你可以不使用它。
对于有趣的部分,你可以这样做
while(!relativepath.empty())
{
if(relativepath.front()==".."
path.pop();
if(relativepath.front()=="." {}
else
path.push(relativepath.front());
relativepath.pop();
}
我不确定这是你想要的,但它并不难做,你可以很容易地适应Windows/Linux通过改变分隔符
相关文章:
- 如何转换真实路径 CString c++
- 在基于英语的系统上将 UTF-8 路径转换为宽字符会引发异常
- 将带斜杠的 Unix 路径转换为 Windows 路径
- 如何将文件系统路径转换为字符串
- 无法转换 .CATPart 文件.错误:输入文件路径似乎包含不支持的字符
- 如何将Qt文件路径从资源转换为绝对路径?
- 将 URI 转换为路径
- 如何将应用程序URI转换为普通文件路径
- 将 UNC 路径转换为网络系统的本地路径
- 如何将目录路径转换为唯一的数字标识符 (Linux/C++)
- Direct2D:将文本转换为路径
- 如何将路径存储在这种结构中,以及如何将其转换为其他内容
- 转换在路径和矩形中的工作方式不同
- 使用 SHGetPathFromIDList 将 PIDL 转换为文件路径
- 如何使用Qt / C++将GUI转换为Windows上的路径
- 将相对路径转换为完整路径的系统功能,即使对于不存在的路径也适用
- 将Mac和Linux上的相对路径转换为绝对路径
- 将硬盘卷路径转换为正常路径
- C++:如何将%USERPROFILE%路径转换为文件路径(应该适用于Windows XP及更高版本)
- Visual c++图像文件路径转换成xml