2012-02-24 77 views
1

我正在使用boost文件系统库,并有两个路径,我需要知道是否有一个优雅的方式来检查path1是否是path2的子节点(例如path1 =/usr/local ,path2 =/usr)。我可以通过使用字符串函数来做到这一点,但我想知道是否有使用boost文件系统函数的方法。我可以用路径迭代器来做到这一点,这是唯一的方法吗?有没有一些帮助功能可以检查?我搜索了文档,但找不到任何东西。然而 感谢boost文件系统3路径包含检查

回答

1
*path1.begin() == *path2.begin() 

这将意味着 “C:/ foo” 的股 “C:/棒” 基地,这可能会出现意想不到的。

for(boost::filesystem::path::iterator itrLeft(path1.begin()), itrRight(path2.begin()); *itrLeft == *itrRight && itrLeft != path1.end() && itrRight != path2.end(); ++itrLeft, ++itrRight) 

这样你可以看到很多原子是如何匹配的话,建议使用boost ::文件系统::绝对的第一,如果你想让它强劲。

+0

OP明确地询问另一种方法,而不是使用路径迭代器 – 2012-02-24 10:05:32

+0

糟糕,好吧,现在你提到它。不过很奇怪的限制。 – Ylisar 2012-02-24 10:10:54

+0

我想用字符串不是那么可靠,所以最好的方法似乎是迭代器.. – cpl 2012-02-24 10:53:12