得到2qdir的共同父母

Get common parent of 2 QDir

本文关键字:同父母 2qdir 得到      更新时间:2023-10-16

是否有办法获得最接近的共同父2 QDir对象?例如:

QDir d1("/someroot/parent/test/folder");
QDir d2("/someroot/parent/another/folder");
QDir d3 = commonParent(d1, d2);
// d3 == "/comeroot/parent/"

提振。不幸的是,文件系统不是一个选项。

const QString commonParent(const QString &path1, const QString &path2)
{
    QString ret = path2;
    while (!path1.startsWith(ret))
        ret.chop(1);
    if (ret.isEmpty())
        return ret;
    while (!ret.endsWith('/'))
        ret.chop(1);
    return ret;
}

您可以使用QDir::cdUp()。

工作的例子:

QString commonParent(const QDir& inputDirOne, const QDir& inputDirTwo) {
  QDir dirOne(inputDirOne);
  QString dirTwoAbsolutePath = inputDirTwo.absolutePath();
  do {
    if (dirTwoAbsolutePath.startsWith(dirOne.absolutePath()))
      return dirOne.absolutePath();
  } while(dirOne.cdUp());
  return QString();
}

和用法:

//QDir dir1("C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\Addins\somefile.txt");
QDir dir1("..");
//QDir dir2("C:\Program Files (x86)\Microsoft Visual Studio 11.0\Licenses\Update\1033\License.htm");
QDir dir2("../../..");
QString result = commonParent(dir1, dir2);
qDebug() << "Common Dir : " << (result.isEmpty() ? "Does not exist" : result);

我用一些奇怪的路径测试了一下,效果很好