QFile::copy异常行为

QFile::copy weird behaviour

本文关键字:copy QFile 异常      更新时间:2023-10-16

QFile::copy不会从我的资源中复制文件。我的代码是:

QTemporaryFile file;
file.setFileTemplate("/tmp/XXXXXX.wav");
file.open();
qDebug() << QFile::copy(":/busy.wav", file.fileName());

显示"False"。但如果我手动设置目标名称,比如

qDebug() << QFile::copy(":/busy.wav", "blabla.wav");

 qDebug() << QFile::copy(":/busy.wav", file.fileName() + ".wav");

它工作得很好。这个"副本"或我的代码有什么问题?

这仅仅是因为QFile不覆盖现有文件(来自文档):

注意,如果一个名为newName的文件已经存在,copy()返回false(即QFile不会覆盖它)。

最简单的解决方案是创建一个专门的函数来创建tmp文件名。由于QTemporaryFile在销毁时删除文件,因此这将正常工作:

QString generateName()
{
    QTemporaryFile file;
    file.setFileTemplate("/tmp/XXXXXX.wav");
    file.open();//QTemporaryFile creates the file. QFile::copy will not be able to overwrite it, so you will need to delete it first.
    file.close();
    return file.fileName();
}//QTemporaryFile gets destroyed, and deletes the file. Now QFile::copy will work fine.
int main()
{
    QFile::copy(your_resource_file, generateName());
}