Я использую библиотеку файловой системы boost и, имея два пути, мне нужно знать, есть ли элегантный способ проверить, является ли path1 дочерним для path2 (например, path1 = / usr / local, path2 = / usr). Я могу сделать это с помощью строковых функций, но мне было интересно, есть ли способ использовать функции ускоренной файловой системы. Я мог бы сделать это с помощью итераторов пути, это единственный способ? Есть ли какая-нибудь вспомогательная функция, которая выполняет эту проверку? Я искал документацию, но ничего не нашел. Спасибо
Boost файловая система 3 проверка включения пути
Ответы (1)
*path1.begin() == *path2.begin()
Однако это будет означать, что «c: / foo» имеет общую базу с «c: / bar», что может быть непреднамеренным.
for( boost::filesystem::path::iterator itrLeft( path1.begin() ), itrRight( path2.begin() ); *itrLeft == *itrRight && itrLeft != path1.end() && itrRight != path2.end(); ++itrLeft, ++itrRight )
Таким образом, вы можете увидеть, сколько атомов соответствует, я предлагаю сначала использовать boost :: filesystem :: absolute, если вы хотите сделать его надежным.
person
Ylisar
schedule
24.02.2012
OP явно спрашивал о другом способе, кроме использования итераторов пути
- person Andriy Tylychko; 24.02.2012
Ой, ну да, теперь, когда ты это упомянул. Однако довольно странное ограничение.
- person Ylisar; 24.02.2012
Я предполагаю, что использование строк не так надежно, поэтому лучший способ - это итераторы.
- person cpl; 24.02.2012