Ежедневный бит (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.