Используя stem () и parent_path () и идти назад по новому пути, пока мы не вернемся к базовому пути, это работает, но я не уверен, что это очень безопасно.
Будьте осторожны, так как пути "/ home" и "/ home /" рассматриваются как разные пути. Приведенное ниже работает только в том случае, если базовый путь равен / home (без косой черты) и новый путь гарантированно будет находиться ниже базового пути в дереве каталогов.
#include <iostream>
#include <boost/filesystem.hpp>
int main(void)
{
namespace fs = boost::filesystem;
fs::path basepath("/home");
fs::path newpath("/home/apple/one");
fs::path diffpath;
fs::path tmppath = newpath;
while(tmppath != basepath) {
diffpath = tmppath.stem() / diffpath;
tmppath = tmppath.parent_path();
}
std::cout << "basepath: " << basepath << std::endl;
std::cout << "newpath: " << newpath << std::endl;
std::cout << "diffpath: " << diffpath << std::endl;
std::cout << "basepath/diffpath: " << basepath/diffpath << std::endl;
return 0;
}