QDir :: rename:冗余参数?

ABC*_*lus 3 c++ qt

我正在使用QT 5.7,并且来自doc:

bool QDir::rename(const QString &oldName, const QString &newName)
Run Code Online (Sandbox Code Playgroud)

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

bool QDir::rename(const QString &newName){
    return this->rename(this->dirName(), newName);
}
Run Code Online (Sandbox Code Playgroud)

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

fro*_*tto 5

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

QDir dir("mydir");
dir.rename("a.txt", "aa.txt");
dir.rename("b.txt", "bb.txt");
Run Code Online (Sandbox Code Playgroud)


Rei*_*ica 5

AQDir::rename不会重命名目录本身,而是重命名目录中的元素。第一个参数选择要重命名的元素。

要重命名绝对路径给出的目录条目,请使用 static 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;
}
Run Code Online (Sandbox Code Playgroud)