使用Qt重命名文件

3
我正在尝试编写一个程序,以新的扩展名重命名选择目录中特定列表的文件。基本上是将所有.dx90文件替换为.dx80文件。这是我迄今为止编写的代码,但它没有起作用。所有文件都被放置在失败的文件列表中,但我没有收到任何错误信息。
#include <QFileDialog>
#include <QString>
#include <QApplication>
#include <QDir>
#include <QStringList>
#include <QTextStream>

QTextStream cout(stdout);

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);

    QString dirName = QFileDialog::getExistingDirectory(0, "Open Directory", QDir::currentPath(), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
    QDir directory(dirName);

    QStringList filters;
    filters << "*.dx90";
    QStringList files = directory.entryList(filters);

    QStringList changedFiles, failedFiles;

    foreach(QString filename, files)
    {
        QFileInfo info(filename);
        QString rawFileName = filename.section(".", 0, 0);
        QString newName = info.absoluteFilePath().section("/", 0, -2) + "/" + rawFileName + ".dx80";

        bool success = directory.rename(info.absoluteFilePath(), newName);

        if(success)
        {
            changedFiles << info.absoluteFilePath();
        }
        else
        {
            failedFiles << info.absoluteFilePath();
        }
    }   

    return 0;
}

你只是将扩展名从.dx90更改为.dx80吗? - Nicholas Smith
是的,这就是需要完成的全部内容。 - Nick Corin
2
对于newName,类似这样的代码QString newName = filename.replace(".dx90", ".dx80");可能更加简洁。 - Nicholas Smith
谢谢,我不知道我可以这样做!以后一定会使用这个方法的 :) - Nick Corin
1个回答

3

我想通了。我犯的错误出在这行代码:

QFileInfo info(filename);

由于变量文件名不是绝对路径,导致无法找到文件。这使得信息变量默认为应用程序当前工作目录的QFileInfo。我通过将该行代码更改为以下内容来修复代码:

QFileInfo info(directory.absolutePath() + "/" + filename);

感谢任何试图帮助我修复代码的人。我希望这对于有类似问题的人有所帮助。


1
最好使用QFile::rename(const QString & oldName, const QString & newName)来重命名文件。当使用QDir::rename时,如果oldName是一个无法立即重命名的文件(而不是目录),Qt将尝试将oldName复制到newName并删除oldName。 - Nejat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接