Russian Qt Forum
Ноябрь 22, 2024, 22:51
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Опредение того, является ли каталог подкаталогом другого
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Опредение того, является ли каталог подкаталогом другого (Прочитано 3541 раз)
AkonResumed
Чайник
Offline
Сообщений: 81
Опредение того, является ли каталог подкаталогом другого
«
:
Ноябрь 17, 2021, 06:47 »
Друзья, заданы два каталога. Это могут быть абсолютные пути, относительные, с симлинками, .. что угодно. Пути локальные. Нужно установить, не является ли один подкаталогом другого (любого уровня).
Qt 5.15. Собственно, в QDir, QQFileInfo я не вижу нужной функции. Неужели мне cdUp()-ить от одного и сравнивать со вторым и наоборот (ну, или там в canonicalPath() подстроки искать)? std::file_system - как там?
Спасибо.
«
Последнее редактирование: Ноябрь 17, 2021, 07:35 от AkonResumed
»
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Опредение того, является ли каталог подкаталогом другого
«
Ответ #1 :
Ноябрь 17, 2021, 18:46 »
Может будет достаточно получить QDir::absolutePath обоих каталогов. И посмотреть результат QString::startsWith
Записан
AkonResumed
Чайник
Offline
Сообщений: 81
Re: Опредение того, является ли каталог подкаталогом другого
«
Ответ #2 :
Ноябрь 17, 2021, 21:05 »
Да, при условии что оба каталога существуют. Только использовать canonicalPath(), т.к. она резолвит симлинки.
Вообще, если обобщить на случай, когда каталог может не существовать (а это сплошь и рядом, например, юзер задает выходной каталог консольной тулзы), то это далеко нетривиальная задача (если делать на Qt), как может показаться на первый взгляд.
Эти QDir, QQFileInfo и т.п. "относительно ленивы". В том смысле, что если директория/файл не существует, то ф-ии типа absolutePath() не будут работать (возвращают пустые строки).
Собственно, ядро проблемы - для произвольного пути (возможно, пока несуществующего) получить canonicalPath(). А дальше так, как вы указали. Поэтому, если есть каталог "/a/b/c//d/..///./e", то нужно самому сделать то, что делает canonicalPath(). Только это будет чисто строковая обработка. Альтернативно (много проще), временно создать этот каталог и заюзать QFileInfo::canonicalPath, но это как-то топорно. Как-то так мыслю.
Записан
qate
Супер
Offline
Сообщений: 1177
Re: Опредение того, является ли каталог подкаталогом другого
«
Ответ #3 :
Ноябрь 17, 2021, 22:01 »
Может глянуть
https://doc.qt.io/qt-5/qurl.html#isParentOf
?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Опредение того, является ли каталог подкаталогом другого
«
Ответ #4 :
Ноябрь 18, 2021, 06:03 »
Цитата: AkonResumed от Ноябрь 17, 2021, 21:05
Да, при условии что оба каталога существуют. Только использовать canonicalPath(), т.к. она резолвит симлинки.
У меня так не вышло (OSX), ни canonicalPath ни absolutePath "полного имени" не дают (или не гарантируют). Напр
/Volumes/Macintosh HD/...
/Users/igor/...
Для того же файла. Помогло QStorageInfo::displayName
Записан
AkonResumed
Чайник
Offline
Сообщений: 81
Re: Опредение того, является ли каталог подкаталогом другого
«
Ответ #5 :
Ноябрь 18, 2021, 07:02 »
Цитата: qate от Ноябрь 17, 2021, 22:01
Может глянуть
https://doc.qt.io/qt-5/qurl.html#isParentOf
?
Да! Я бегло смотрел на QUrl (поскольку знал, что в .NET-овской Url есть такой функционал) ... и просмотрел! Возможно, это хорошее решение. Но как она с симлинками (нужно резолвить)?
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...