QFile::copy异常行为
QFile::copy weird behaviour
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());
}
相关文章:
- std::filesystem::copy throws filesystem_error
- 如何在 Boost.Asio 中使用 Zero-copy sendmsg/receive
- 如何从QFile阅读?它显示该文件不可访问
- QDial:如何将 int 值传递给需要常量字符*的 Qfile?
- QDataStream 读取和写入的字节数比 QFile::length() 报告要多
- Qt 写入 xml: QIODevice::write (QFile, "D:/logs.xml" ): 设备未打开
- C++ 一个lambda浅拷贝const Type&如果它被赋予一个命名捕获,如[copy=val](){}?
- QML/C++/QObject Struct Copy
- C++赋值运算符,我们可以用 copy 替换它吗?
- 为什么我使用 std::copy() 收到运行时错误(分段错误)?
- 如何解决C++中声纳库贝静态代码分析错误"Explicitly define the missing copy constructor, move constructor .."
- 如何使用 std::copy 当类有"无符号字符和运算符[]"时
- std::copy 导致运行时检查失败 #2
- 为什么 Clang 在命名空间'std'中没有名为 'copy' 的成员给出错误
- Qt中的QFile::copy(source,dest)的实现有时是错误的吗?
- QFile copy - 静态对象与临时对象
- 将 QFile::copy 创建创建文件的副本或将内容从一个文件移动到另一个文件
- return QFile::copy from web
- QFile::copy异常行为
- 进度条带有QFile::copy()