我知道,要在给定的绝对路径中在Qt中创建新路径,请使用QDir::makepath()
作为dir.makepath(path)
,如this问题中所建议的那样。我使用它没有任何问题,它工作正常。我的问题是针对为什么,开发人员不会像QDir::makepath("/Users/me/somepath/");
那样提供静态函数来调用。我似乎没有必要创建一个新的QDir
实例。
我只能想到两个可能的原因:
1。开发人员懒得"或没有时间所以他们没有添加一个,因为它不是绝对必要的。
2。调用QDir
的{{1}}实例也将设置为mkpath(path)
,因此可以方便进一步使用 - 但我似乎无法找到任何提示,这是docs中的实际行为。
我知道我会重复自己,但是再一次, 需要 的帮助,但我对为什么<感兴趣/ em>一个人必须这样做。 非常感谢,我可能错过了。
答案 0 :(得分:3)
让我们看一下所述方法的代码:
bool QDir::mkdir(const QString &dirName) const
{
const QDirPrivate* d = d_ptr.constData();
if (dirName.isEmpty()) {
qWarning("QDir::mkdir: Empty or null file name");
return false;
}
QString fn = filePath(dirName);
if (d->fileEngine.isNull())
return QFileSystemEngine::createDirectory(QFileSystemEntry(fn), false);
return d->fileEngine->mkdir(fn, false);
}
来源:http://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/io/qdir.cpp#n1381
正如我们所看到的,静态版本很容易实现:
bool QDir::mkdir(const QString &dirName) const
{
if (dirName.isEmpty()) {
qWarning("QDir::mkdir: Empty or null file name");
return false;
}
return QFileSystemEngine::createDirectory(QFileSystemEntry(dirName), false);
}
(另见http://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/io/qdir.cpp#n681)
首先,非静态方法具有一些优点。显然,使用对象的现有文件引擎有一些东西。但是,我想象一下在特定目录下创建几个目录的用例(QDir
已指向)。
那为什么不提供两者?
判决(tl / dr):我认为原因是简单的代码卫生。使用API时,QDir::makepath(path);
和QDir().makepath(path);
之间的差异很小。创建对象的性能损失也可以忽略不计,因为如果您碰巧更频繁地执行操作,则会重复使用相同的对象。但是在代码维护者方面,不维护同一方法的两个版本可以说更方便(工作量少,容易出错)。