Учитывая следующий код,
namespace fs = boost::filesystem;
fs::path parentPath("/home/user1/");
fs::path childPath("/home/user1/Downloads/Books");
std::cout << childPath.lexically_relative(parentPath) << '\n';
Я ожидаю, что результат будет "Downloads/Books"
, но вместо этого "../Downloads/Books"
. Если я изменю parentPath
на "/home/user1"
(удаляя конечный разделитель), я получу ожидаемый результат.
В моем реальном коде пути часто бывают в виде строкиз данных. В моем контексте, косая черта в конце непреднамеренная и должна игнорироваться для целей любой логики. По сути, в моей программе "/home/user1"
идентичен "/home/user1/"
. Однако логика boost::filesystem::path
не отражает это утверждение.
Итак, мой вопрос состоит из двух частей:
Почему конечный разделитель влияет на поведение? Я просто не могу понять, почему в этом случае он увеличивает каталог на ".."
.
Как я могу заставить path
игнорировать или нормализовать завершающие косые черты в моей программе глобально? Например, «санация» моих строк пути перед созданием объектов path
была бы слишком большой нагрузкой на обслуживание, поэтому мне нужно что-то более присущее, если это возможно.
Вот Живой образец Я использовал для тестирования.