QFile ::复制奇怪的行为

时间:2015-09-24 13:18:09

标签: c++ qt

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");

它工作正常。这个“副本”或我的代码出了什么问题?

1 个答案:

答案 0 :(得分:1)

这只是因为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());
}