2

2 つの QDir オブジェクトの最も近い共通の親を取得する方法はありますか? たとえば、次のようになります。

QDir d1("/someroot/parent/test/folder");
QDir d2("/someroot/parent/another/folder");

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

Boost.Filesystem は残念ながらオプションではありません。

4

2 に答える 2

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);

これらをいくつかの奇妙なパスでテストしましたが、正常に動作します

于 2013-03-30T01:26:36.457 に答える