我正在尝试编写一个程序,该程序使用新扩展名重命名所选目录中的某个文件列表。几乎用.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;
}
答案 0 :(得分:2)
我明白了。我犯的错误在于:
QFileInfo info(filename);
找不到文件,因为变量filename不是绝对路径。这使得info变量默认为应用程序当前工作目录的QFileInfo。我通过将该行更改为:
来修复代码QFileInfo info(directory.absolutePath() + "/" + filename);
感谢任何试图帮我修复代码的人。我希望这有助于其他有类似问题的人。