#c #search #boost #boost-filesystem
#c #Поиск #повышение #boost-файловая система
Вопрос:
Итак, у нас есть такой родительский элемент, somepath/**
поэтому, если какой-либо из них отправит нам, somepath/myfolder/file
мы получим true
, и если мы получим, someotherpath/
мы получим false
. Итак, как узнать, соответствует ли path определенному родителю?
Комментарии:
1. Что такое «часть»? Вы имеете в виду «родительский»?
2. Я полагаю, что «parten» — это слово на немецком, и Google говорит, что оно также используется на испанском, но не на английском — не могли бы вы пояснить, что вы под этим подразумеваете? Не зная, что вы под этим подразумеваете, ваш вопрос трудно расшифровать (в лучшем случае).
3. @Jerry: Как носитель немецкого языка, я могу сказать, что это не так 😉 Быстрый поиск в Google в разделе «parten path» предлагает «родительский путь», что заставило меня подумать, что он может означать «родительский». Может иметь некоторый смысл…
4. @kiw: Я поверю вам на слово — когда дело доходит до немецкого, я в лучшем случае отталкиваюсь от далеких воспоминаний. Родитель вроде имеет смысл, но даже если это так, он все еще не включил достаточно для ответа. Например, хочет ли он иметь дело с такими вещами, как символические ссылки, или нет?
Ответ №1:
Вам нужно нормализовать оба пути, затем вы выполняете простое сравнение подстрок, чтобы увидеть, начинается ли ваш путь, о котором идет речь, с нормализованного ссылочного пути.
Нормализация включает добавление текущего рабочего каталога к относительному пути, нормализацию регистра, если ваша файловая система не чувствительна к регистру, возможно, разрешение символических ссылок и, возможно, даже тестирование жестких ссылок. Если вы хотите, чтобы сам файл был символической ссылкой, вы должны извлечь часть пути перед нормализацией.
Я сделал это в Linux с помощью realpath()
функции, и она работает очень хорошо, даже если ссылочный path содержит символические ссылки. Однако не знаю, как это сделать с помощью boost.
Комментарии:
1. и поскольку вопрос включает тег boost_filesystem, я предлагаю использовать
system_complete()
метод для нормализации