QDir::rename:冗余参数

QDir::rename : redundant parameters?

本文关键字:参数 冗余 rename QDir      更新时间:2023-10-16

我使用的是QT 5.7,从文档:

bool QDir::rename(const QString &oldName, const QString &newName)

为什么我要指定目录的oldName ?它不是现在的名字吗?我正在考虑这个重载函数:

bool QDir::rename(const QString &newName){
    return this->rename(this->dirName(), newName);
}

API是否指向当前目录的子目录?

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

不,这不是多余的。QDir可以指定一个目录下存在多个文件。例如,考虑目录"mydir/",其中有文件a.txtb.txt。因此,使用下面的代码片段,我们可以根据它们的旧名称重命名它们。

QDir dir("mydir");
dir.rename("a.txt", "aa.txt");
dir.rename("b.txt", "bb.txt");