问题描述
|
所以...我有一个基本路径和一个新路径。新路径中包含基本路径。我需要了解新路径中的不同之处。就像我们有/ 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());