如何从另一条路径中减去一条路径?

Rel*_*lla 4 c++ boost boost-filesystem

所以......我有一个基本路径和一个新路径.新路径包含基本路径.我需要看看新路径有什么不同.就像我们/ home /和新路径是/ home/apple/one一样,我需要从它获得apple/one.注意 - 当我从(homePath/diffPath)创建一些路径时,我需要再次获得/ home/apple/one.如何用Boost FileSystem做这样的事情?

Osk*_* N. 9

使用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;
}
Run Code Online (Sandbox Code Playgroud)