Почему конечные разделители изменяют поведение преобразований относительных путей в Boost.Filesystem? - PullRequest
2 голосов
/ 04 октября 2019

Учитывая следующий код,

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 не отражает это утверждение.

Итак, мой вопрос состоит из двух частей:

  1. Почему конечный разделитель влияет на поведение? Я просто не могу понять, почему в этом случае он увеличивает каталог на "..".

  2. Как я могу заставить path игнорировать или нормализовать завершающие косые черты в моей программе глобально? Например, «санация» моих строк пути перед созданием объектов path была бы слишком большой нагрузкой на обслуживание, поэтому мне нужно что-то более присущее, если это возможно.

Вот Живой образец Я использовал для тестирования.

1 Ответ

0 голосов
/ 21 октября 2019

Вскоре после публикации этого вопроса я обнаружил, что это ошибка, сообщил здесь . Первоначально я думал, что, возможно, я делаю что-то не так. Несмотря на то, что мой вопрос не имеет особого смысла, я не хотел просто удалять его, если другие сталкиваются с той же проблемой.

...