有没有办法获得2个QDir对象的最近共同父项?例如:
QDir d1("/someroot/parent/test/folder");
QDir d2("/someroot/parent/another/folder");
QDir d3 = commonParent(d1, d2);
// d3 == "/comeroot/parent/"
不幸的是,Boost.Filesystem不是一个选项。
答案 0 :(得分:2)
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;
}
答案 1 :(得分:0)
您可以使用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);
用一些奇怪的路径测试这些并且它工作正常