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

发布于 2025-01-08 12:52:21 字数 217 浏览 0 评论 0原文

我正在使用 boost 文件系统库,并且有两个路径,我需要知道是否有一种优雅的方法来检查 path1 是否是 path2 的子级(例如 path1 = /usr/local,path2 = /usr)。我可以通过使用字符串函数来做到这一点,但我想知道是否有一种使用 boost 文件系统函数的方法。我可以使用路径迭代器来做到这一点,这是唯一的方法吗?是否有一些辅助函数可以进行此检查?我搜索了文档但找不到任何内容。 谢谢

I'm using the boost filesystem library, and having two paths, I need to know if there is an elegant way of checking if path1 is a child of path2 (e.g. path1 = /usr/local, path2 = /usr). I can do this by using string functions, but I was wondering if there is a way using boost filesystem functions. I could do this with path iterators, is that the only way? Is there some helper function that does this check? I searched on the documentation but could not find anything.
Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

时光是把杀猪刀 2025-01-15 12:52:21
*path1.begin() == *path2.begin()

然而,这意味着“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 。

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

This will however mean that "c:/foo" shares a base with "c:/bar", which might be unintended.

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

This way you can see how many atoms are matching, I suggest using boost::filesystem::absolute first if you want to make it robust.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文