c++ - Qt 下载大文件

标签 c++ qt download

我正在尝试为我的应用程序创建一个 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/

相关文章:

c++ - 如何检查Qwidget是否存在

qt - Qt 的 QGraphicsItem : How is this *supposed* to work? 中的事件和信号

git - 从 github 下载的 zip 签名不匹配

c++ - 使用 Ifstream 将文本文件中的数字添加到 C 样式数组

c++ - 指针数组作为函数参数

qt - QSettings clear,有什么作用?

unix - httrack 跟随重定向

java - 如何在Java中使用okhttpclient下载图片文件

c++ - 即使所有项目都已弹出,也需要析构函数来释放内存空间

c++ - 在 Visual C++ 中传递给函数时,Sizeof 数组自动更改