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

问题描述

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

解决方法

使用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;
}
    ,如果您知道
newpath
确实属于
basepath
,其他解决方案可能是:
auto nit = newpath.begin();

for (auto bit = basepath.begin(); bit != basepath.end(); ++bit,++nit)
    ;

fs::path = path(nit,newpath.end());
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...