我正在尝试为我的应用程序创建一个 FileDownloader 类,它与下载大文件兼容,以避免在下载过程中占用大量内存。我编写了以下函数以在下载期间使用 QNetworkReply 的 readyRead() 信号写出文件:
void FileDownloader::writeReady(){
if(file->open(QIODevice::ReadWrite | QIODevice::Append)){
QDataStream fout(file);
fout << reply->readAll();
} else{
qDebug(file->errorString().toLatin1());
}
file->close();
}
问题是它没有按照预期的方式写入文件并且文件已损坏。但是,如果我使用 finished() 信号而不是 readyRead() 信号,它会完美地写出文件(它有一个 4 字节大小的错误,但我可以打开文件并完美地读取它的所有内容)。
如何使其与 readyRead() 信号和大文件兼容?
最佳答案
你正在使用 writeReady(),你应该改为监听 readReady()!
不确定这是否有帮助,但是,1) file->close() 应该在 if(file->open() 内,否则关闭它没有任何意义,另外 2) readAll() 可能返回一个空的QByteArray() ,所以我会在将内容发送到流之前对其进行测试,并避免使用 QDataStream ,但只需使用: QByteArray data = reply->readAll();文件->写入(数据)
关于c++ - Qt 下载大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23323308/