Попробуйте следующий код:
QString getNearestExistingPath(const QString &path)
{
QString existingPath(path);
while (!QFileInfo::exists(existingPath)) {
const QString previousPath(existingPath);
existingPath = QFileInfo(existingPath).dir().absolutePath();
if (existingPath == previousPath) {
return QString();
}
}
return existingPath;
}
Эта функция использует метод QFileInfo::dir()
, который возвращает родительский каталог для указанного пути.Код зацикливается до тех пор, пока не будет встречен существующий путь или пути в двух последних итерациях идентичны (это помогает нам избежать бесконечного цикла).
Из QFileInfo::dir()
docs:
Возвращает путь родительского каталога объекта в виде объекта QDir
.
Примечание: Возвращаемое QDir
всегда соответствуетродительский каталог объекта, даже если QFileInfo представляет каталог.
Я все же рекомендую вам выполнить некоторые тесты, потому что я могу что-то упустить.