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());
}

关于c++ - QFile::copy奇怪的行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32762416/

10-12 21:21