C++ boost文件系统3路径包含检查

C++ boost文件系统3路径包含检查,c++,boost,boost-filesystem,C++,Boost,Boost Filesystem,我使用的是boost文件系统库,有两个路径,我需要知道是否有一种优雅的方法来检查path1是否是path2的子级(例如path1=/usr/local,path2=/usr)。我可以通过使用字符串函数来实现这一点,但我想知道是否有一种方法可以使用boost文件系统函数。我可以用路径迭代器实现这一点,这是唯一的方法吗?是否有帮助函数执行此检查?我查了一下文件,但什么也没找到。 谢谢 然而,这意味着“c:/foo”与“c:/bar”共享一个基数,这可能是无意的 for( boost::filesys

我使用的是boost文件系统库,有两个路径,我需要知道是否有一种优雅的方法来检查path1是否是path2的子级(例如path1=/usr/local,path2=/usr)。我可以通过使用字符串函数来实现这一点,但我想知道是否有一种方法可以使用boost文件系统函数。我可以用路径迭代器实现这一点,这是唯一的方法吗?是否有帮助函数执行此检查?我查了一下文件,但什么也没找到。 谢谢

然而,这意味着“c:/foo”与“c:/bar”共享一个基数,这可能是无意的

for( boost::filesystem::path::iterator itrLeft( path1.begin() ), itrRight( path2.begin() ); *itrLeft == *itrRight && itrLeft != path1.end() && itrRight != path2.end(); ++itrLeft, ++itrRight ) 
通过这种方式,您可以看到有多少原子是匹配的,如果您想使其健壮,我建议首先使用boost::filesystem::absolute

然而,这意味着“c:/foo”与“c:/bar”共享一个基数,这可能是无意的

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

通过这种方式,您可以看到有多少原子是匹配的,如果您想让它更健壮,我建议首先使用boost::filesystem::absolute。

OP显然是在询问使用路径迭代器之外的另一种方法。然而,非常奇怪的限制。我猜使用字符串并不是那么可靠,所以最好的方法似乎是迭代器..OP显然在问使用路径迭代器的另一种方法,嗯,是的,既然你提到了它。然而,非常奇怪的限制。我想使用字符串并不是那么可靠,所以最好的方法似乎是迭代器。。