用Qt重命名文件

时间:2014-05-29 10:38:28

标签: qt renaming qfile

我正在尝试编写一个程序,该程序使用新扩展名重命名所选目录中的某个文件列表。几乎用.dx80文件替换所有.dx90文件。这是我到目前为止编写的代码,但它不起作用。所有文件都被放入失败的文件列表中,但我没有错误。

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

1 个答案:

答案 0 :(得分:2)

我明白了。我犯的错误在于:

QFileInfo info(filename);

找不到文件,因为变量filename不是绝对路径。这使得info变量默认为应用程序当前工作目录的QFileInfo。我通过将该行更改为:

来修复代码
QFileInfo info(directory.absolutePath() + "/" + filename);

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