Относительный путь в C++
Лексический путь от базового каталога к цели строит relative без обращения к диску, если это возможно.
Удобно показывать пользователю короткую цепочку вместо двух длинных абсолютных строк. Запишем базу и файл внутри нее, затем выведем относительную форму:
#include <filesystem>
#include <iostream>
std::filesystem::path base = std::filesystem::current_path();
std::filesystem::path target = base / "notes.txt";
std::filesystem::path step = std::filesystem::relative(target, base);
std::cout << step.string() << "\n";
Для пары «каталог и файл внутри него» часто получается просто имя файла без префикса каталогов.
Задайте std::filesystem::path home
как std::filesystem::current_path и
std::filesystem::path cfg как
home / "app.ini". Выведите
std::filesystem::relative(cfg, home).string.
Сравните std::filesystem::relative для
std::filesystem::path{"a/b"} и базы
std::filesystem::path{"a"}. Выведите
строку результата.