【问题标题】:C++ Qt5 QDir rename returning falseC++ Qt5 QDir 重命名返回 false
【发布时间】:2019-12-07 06:22:13
【问题描述】:

我是 Qt 新手,正在学习如何使用 QDir 和 QFile 库重命名文件。

我知道如何重命名,我可以做到,但是当我在这个循环中尝试时它不起作用。

QDir editFile;
std::cout << "Attempting to chop and put .mp4 onto a regular file.\n";
QString fileNameBuf{argv};
QString fileOriginal{argv};
for(int l{0}; l < fileNameBuf.size(); ++l)
{
    if(fileNameBuf.at(l) == '.')
    {
        fileNameBuf.chop(fileNameBuf.size() - l);
        break;
    }
}
fileNameBuf.append(".mp4");
if(editFile.rename(argv, fileNameBuf))
    std::cout << "Successful\n";
else
    std::cout << "did not make it.\n";

这实际上是在一个发送名为 argv 的 QString 的函数中。 argv 是文件路径。 我让它附加 .mp4 并删除旧的扩展名。我听说并知道,如果您将 Q 重命名错误,它将无法正常工作。请帮我处理这段代码。我看过其他关于此的帖子,但它们似乎没有帮助。

【问题讨论】:

  • 我使用了您的代码示例,如果 argv 包含有效的文件名或路径 + 文件名,它就可以工作。
  • 它们是有效的路径,但我会尝试几种不同的方法,看看能否找出我的路径有什么问题。谢谢!

标签: c++ qt5


【解决方案1】:

我希望您知道文件不是这样工作的...只是更改文件的扩展名并不意味着它会导致新的有效文件类型。

说了这么多。无需重新发明轮子:

查看官方文档:

https://doc.qt.io/qt-5/qfile.html#rename-1

QFile editFile{"foo.txt"};
std::cout << "Attempting to chop and put .mp4 onto a regular file.\n";
if(editFile.rename("foo.mp4"))
    std::cout << "Successful\n";
else
    std::cout << "did not make it.\n";

【讨论】:

    【解决方案2】:

    如果 Qt 有 indexOf() 在字符串中查找字符,为什么要使用 for() 来完成这个任务?

    为什么不用replace()来改变文件扩展名?

    QString::replace 很容易完成这个任务,因为如果字符串不包含源字符串,它什么也不做......

    【讨论】:

    • 谢谢,我会调查的。我只是在学习 Qt 并没有意识到我可以使用 replace 或 indexOf 我会明确地合并它。谢谢!
    【解决方案3】:

    如前所述,使用 Qt 的函数。如果您遇到此问题,请确保在重命名之前没有打开文件。那就是我在这里做错了,除非您关闭它或文件超出范围,否则您将无法重命名它。 感谢所有回答的人的见解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-06
      • 1970-01-01
      • 1970-01-01
      • 2018-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多