Название: Опредение того, является ли каталог подкаталогом другого Отправлено: AkonResumed от Ноябрь 17, 2021, 06:47 Друзья, заданы два каталога. Это могут быть абсолютные пути, относительные, с симлинками, .. что угодно. Пути локальные. Нужно установить, не является ли один подкаталогом другого (любого уровня).
Qt 5.15. Собственно, в QDir, QQFileInfo я не вижу нужной функции. Неужели мне cdUp()-ить от одного и сравнивать со вторым и наоборот (ну, или там в canonicalPath() подстроки искать)? std::file_system - как там? Спасибо. Название: Re: Опредение того, является ли каталог подкаталогом другого Отправлено: __Heaven__ от Ноябрь 17, 2021, 18:46 Может будет достаточно получить QDir::absolutePath обоих каталогов. И посмотреть результат QString::startsWith
Название: Re: Опредение того, является ли каталог подкаталогом другого Отправлено: AkonResumed от Ноябрь 17, 2021, 21:05 Да, при условии что оба каталога существуют. Только использовать canonicalPath(), т.к. она резолвит симлинки.
Вообще, если обобщить на случай, когда каталог может не существовать (а это сплошь и рядом, например, юзер задает выходной каталог консольной тулзы), то это далеко нетривиальная задача (если делать на Qt), как может показаться на первый взгляд. Эти QDir, QQFileInfo и т.п. "относительно ленивы". В том смысле, что если директория/файл не существует, то ф-ии типа absolutePath() не будут работать (возвращают пустые строки). Собственно, ядро проблемы - для произвольного пути (возможно, пока несуществующего) получить canonicalPath(). А дальше так, как вы указали. Поэтому, если есть каталог "/a/b/c//d/..///./e", то нужно самому сделать то, что делает canonicalPath(). Только это будет чисто строковая обработка. Альтернативно (много проще), временно создать этот каталог и заюзать QFileInfo::canonicalPath, но это как-то топорно. Как-то так мыслю. Название: Re: Опредение того, является ли каталог подкаталогом другого Отправлено: qate от Ноябрь 17, 2021, 22:01 Может глянуть https://doc.qt.io/qt-5/qurl.html#isParentOf ?
Название: Re: Опредение того, является ли каталог подкаталогом другого Отправлено: Igors от Ноябрь 18, 2021, 06:03 Да, при условии что оба каталога существуют. Только использовать canonicalPath(), т.к. она резолвит симлинки. У меня так не вышло (OSX), ни canonicalPath ни absolutePath "полного имени" не дают (или не гарантируют). Напр/Volumes/Macintosh HD/... /Users/igor/... Для того же файла. Помогло QStorageInfo::displayName Название: Re: Опредение того, является ли каталог подкаталогом другого Отправлено: AkonResumed от Ноябрь 18, 2021, 07:02 Может глянуть https://doc.qt.io/qt-5/qurl.html#isParentOf ? Да! Я бегло смотрел на QUrl (поскольку знал, что в .NET-овской Url есть такой функционал) ... и просмотрел! Возможно, это хорошее решение. Но как она с симлинками (нужно резолвить)? |