Escrevendo um QNetworkReply para um arquivo
Pergunta
Eu estou baixando um arquivo usando QNetworkAccessManager :: get mas ao contrário QHttp :: get não há nenhum built-in maneira de escrever diretamente a resposta a uma QIODevice diferente.
A maneira mais fácil seria fazer algo como isto:
QIODevice* device;
QNetworkReply* reply = manager.get(url);
connect(reply, SIGNAL(readyRead()), this, SLOT(newData()));
e, em seguida, no slot newData:
device->write(reply->readAll());
Mas eu não tenho certeza se este é o caminho certo, talvez eu perdi alguma coisa.
Solução
Isso parece corrigir. Gostaria de usar as formas de nível inferior de read()
e write()
, não os QByteArray
, que não suportam adequadamente o tratamento de erros, mas diferente do que, ele parece estar bom.
Você está tendo problemas com ele?
Outras dicas
Melhor usar o sinal acabado de ler todo o conteúdo no final do processo de download. Um exemplo (remova o ciclo de eventos e usar um novo slot para torná-lo assíncrono):
QNetworkAccessManager manager;
QEventLoop loop;
QNetworkReply *reply = manager.get( request );
QObject::connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
QFile file( "YOUR FILE" );
file.open(QIODevice::WriteOnly);
file.write(reply->readAll());
delete reply;