我使用QT 5.7和doc:
bool QDir::rename(const QString &oldName, const QString &newName)
为什么要指定dir的oldName?这不是现在的名字吗? 我正在考虑这个重载功能:
bool QDir::rename(const QString &newName){
return this->rename(this->dirName(), newName);
}
API是否引用了当前目录的子目录?
答案 0 :(得分:5)
不,这不是多余的。 QDir
可以指定可能存在多个文件的目录。例如,考虑我们有文件"mydir/"
和a.txt
的目录b.txt
。因此,使用以下代码段,我们可以根据旧名称重命名它们。
QDir dir("mydir");
dir.rename("a.txt", "aa.txt");
dir.rename("b.txt", "bb.txt");
答案 1 :(得分:3)
QDir::rename
不会重命名目录本身,它会重命名目录中的元素。第一个参数选择要重命名的元素。
要重命名绝对路径指定的目录条目,请使用静态QFile::rename(const QString &oldName, const QString &newName)
。
要重命名目录本身,您需要以下内容:
bool renameDir(QDir & dir, const QString & newName) {
auto src = QDir::cleanPath(dir.filePath("."));
auto dst = QDir::cleanPath(
dir.filePath(QStringLiteral("..%1%2").arg(QDir::separator()).arg(newName)));
auto rc = QFile::rename(src, dst);
if (rc) dir.setPath(dst);
return rc;
}