Ежедневный бит (e) C++ # 204, поддержка пути к файловой системе C++ 17 и связанные с ней функции.

Библиотека файловой системы C++17 ввела понятие пути к файловой системе.

Пути могут быть преобразованы в их абсолютные, канонические и относительные формы и проверены на эквивалентность для всех этих типов.

Пути, которые ссылаются на каталоги, можно исследовать с помощью итераторов каталогов либо только для этого каталога, либо рекурсивно.

#include <filesystem>
#include <cassert>

std::filesystem::path local(".");
// iterate over entries in directory specified by path
for (const auto& entry : std::filesystem::directory_iterator(local)) {
    auto p1 = entry.path(); // e.g. ./file.ext
    auto p2 = absolute(entry.path()); // e.g. /some/path/./file.ext
    auto p3 = canonical(entry.path()); // e.g. /some/path/file.ext

    // paths can be checked for equivalence (only for valid paths)
    assert(equivalent(p1,p2));
    assert(equivalent(p2,p3));
}

// recursively iterate over entries in directory specified by path
for (const auto& entry :
     std::filesystem::recursive_directory_iterator(local)) {
    auto p1 = entry.path(); // e.g. ./file.ext
    auto p2 = absolute(entry.path()); // e.g. /some/path/./file.ext
    auto p3 = canonical(entry.path()); // e.g. /some/path/file.ext
}

// Relative paths
std::filesystem::path a("/some/file/path");
std::filesystem::path b("/some/other/path");

std::filesystem::path c = relative(a,b);
// c == "../../file/path"

Откройте пример в Compiler Explorer.