boost::filesystem::recursive_directory_iterator
には、照会できるpath()
プロパティがあります。その後、手動で比較するのパスを構築するboost::filesystem::path
で使用可能な次の分解法を使用することができます。
path root_path() const;
path root_name() const; // returns 0 or 1 element path
path root_directory() const; // returns 0 or 1 element path
path relative_path() const;
path parent_path() const;
path filename() const; // returns 0 or 1 element path
path stem() const; // returns 0 or 1 element path
path extension() const; // returns 0 or 1 element path
たとえばあなたは次のようにルートをストリッピングのバージョンをロールアウトすることができます
#include <iostream>
#include <boost/filesystem.hpp>
boost::filesystem::path strip_root(const boost::filesystem::path& p) {
const boost::filesystem::path& parent_path = p.parent_path();
if (parent_path.empty() || parent_path.string() == "/")
return boost::filesystem::path();
else
return strip_root(parent_path)/p.filename();
}
int main() {
std::cout << strip_root("/a") << std::endl;
std::cout << strip_root("https://stackoverflow.com/a/b") << std::endl;
std::cout << strip_root("https://stackoverflow.com/a/b/c") << std::endl;
std::cout << strip_root("https://stackoverflow.com/a/b.dir/c.ext") << std::endl;
}
// Output:
""
"b"
"b/c"
"b.dir/c.ext"
substringメソッドがありますおそらくあなたの最高の賭け。 2つのディレクトリツリーを比較するときに行うことです。 –