从两个绝对路径获得相对路径
|
我有两个绝对文件系统路径(A和B),并且我想生成第三个文件系统路径,该路径表示\“ A相对于B \”。
用例:
媒体播放器管理播放列表。
用户将文件添加到播放列表。
相对于播放列表路径将新文件路径添加到播放列表。
将来,整个音乐目录(包括播放列表)将移至其他位置。
所有路径仍然有效,因为它们是相对于播放列表的。
boost::filesystem
似乎具有complete
来解析relative ~ relative => absolute
,但是没有相反的作用(absolute ~ absolute => relative
)。
我想用Boost路径做到这一点。
没有找到相关结果
已邀请:
7 个回复
渐首洽陈染
。 原始的1.60.0之前版本的答案如下。 Boost不支持此功能;这是一个悬而未决的问题-#1976(完整的逆函数)-但是似乎并没有太大的吸引力。 这是一个模糊的幼稚解决方法,似乎可以解决问题(不确定是否可以改进):
哭木算
恋卡
用于同一任务,但是-由于我的应用程序同时使用Qt和Boost库,因此我决定使用Qt,它使用一种简单的方法QString QDir :: relativeFilePath(const QString&fileName)来完成此任务:
它就像一种魅力,为我节省了数小时的生命。
郡晒景沧
,这是不费吹灰之力的:
输出(第二个参数为基数)
它使用ѭ12进行比较。 与纯词法函数的区别在于,“ 9”解析符号链接并使用来规范化两条路径 comparison14ѭ(for15的介绍)在比较之前。
艰管垮淮
} 这将完成您想要的工作-从A上移,直到您击中它的公用文件夹,并且B都是B的后代,然后下移到B。您可能不需要我拥有的“ commonDirsInOrder \”返回,但是\“ routeFrom1To2 \”返回的是您要的那个。 如果您打算将工作目录实际更改为\“ B \”,则可以直接使用\“ routeFrom1To2 \”。请注意,尽管所有\“ .. \”部分,此函数都会产生绝对路径,但这不成问题。
期差骇蓟
。
掏得透垦滩
,
。 Win32平台已经过测试。 只需致电:
并且,它将返回从ѭ22到
的相对路径。 例: