閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

ルートディレクトリでhas_parentがfalseになると思っていた

#include <filesystem>

namespace fs = std::filesystem;

int main()
{
    fs::path path(R"(C:\Users\Public\Documents)");
    while (path.has_parent_path())
    {
        std::cout << path.stem() << std::endl;
        path = path.parent_path();
    }

    return 0;
}

みたいなコードを書くと無限ループになるんですね。なんか、ルートディレクトリはさらに上にはいけないからhas_parentはfalseになると思っちゃったんですよね。

fs::path path(R"(C:\Users\Public\Documents)");
while (path != path.root_path())
{
    std::cout << path.stem() << std::endl;
    path = path.parent_path();
}

みたいにするのかな。

Pythonのpathlibも同じでした。

from pathlib import Path
print(Path(r"C:\\").parent) # => C:\