私はブーストファイルシステムライブラリを使用しており、2つのパスがあるので、path1がpath2の子であるかどうかをチェックする洗練された方法があるかどうかを知る必要があります(例:path1 = / usr / local、path2 = / usr)。文字列関数を使用してこれを行うことはできますが、ブーストファイルシステム関数を使用する方法があるかどうか疑問に思いました。パスイテレータを使用してこれを行うことができますが、それが唯一の方法ですか?このチェックを行うヘルパー関数はありますか?ドキュメントを検索しましたが、何も見つかりませんでした。ありがとう
1 に答える
1
*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を使用することをお勧めします。
于 2012-02-24T10:02:04.880 に答える