首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取2个QDir的公共父级

获取2个QDir的公共父级
EN

Stack Overflow用户
提问于 2013-03-30 08:33:56
回答 2查看 1.8K关注 0票数 2

有没有办法获得2个QDir对象的最接近的公共父对象?举个例子:

代码语言:javascript
复制
QDir d1("/someroot/parent/test/folder");
QDir d2("/someroot/parent/another/folder");

QDir d3 = commonParent(d1, d2);
// d3 == "/comeroot/parent/"

不幸的是,Boost.Filesystem不是一个选项。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-30 12:46:38

代码语言:javascript
复制
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;
}
票数 2
EN

Stack Overflow用户

发布于 2013-03-30 09:26:36

您可以使用QDir::cdUp()来实现这一点。

工作示例:

代码语言:javascript
复制
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();
}

和用法:

代码语言:javascript
复制
//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);

我用一些奇怪的路径测试了它们,它工作得很好

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15713529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档