2011-04-17 120 views
3

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

回答

8

使用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; 
} 
0

其他的解决方案,如果你知道newpath真正属于basepath,可能是:

auto nit = newpath.begin(); 

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

fs::path = path(nit, newpath.end()); 
相关问题