文件下载-在文件写入前检查错误

File download - check for error before file write

本文关键字:检查 错误 文件 文件下载      更新时间:2023-10-16

我使用Qt从HTTP下载文件,为此,我使用两个信号:

connect(currentDownload, SIGNAL(finished()),
        SLOT(downloadFinished()));
connect(currentDownload, SIGNAL(readyRead()),
        SLOT(downloadReadyRead()));

回调:

void DownloadManager::downloadFinished()
{
    output.close();
    if (currentDownload->error()) {
        // download failed
        std::cout << "Failed: [" << currentDownload->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt()
                     << "] " << qPrintable(currentDownload->errorString()) << std::endl;
    } else {
        std::cout << "Download succeeded" << std::endl;
    }
    currentDownload->deleteLater();
    startNextDownload();
}
void DownloadManager::downloadReadyRead()
{
    output.write(currentDownload->readAll());
}

我遇到的问题是,我不知道如何跳过写入输出文件,如果在下载期间发生任何错误,无论出于何种原因。这是不符合逻辑的-因为我只能检查finished()信号发射期间的错误。检查readyRead()信号期间的错误将不会显示任何错误,即使它们存在。在结果中,404输出文件将被写入磁盘。怎么解呢?

您应该使用QNetworkRequest来获取所有信息。参考这个例子。

QNetworkAccessManager提供更多的信号来处理错误。

QNetworkReply *reply = manager->get(request);
connect(reply, SIGNAL(readyRead()), this, SLOT(slotReadyRead()));
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),
        this, SLOT(slotError(QNetworkReply::NetworkError)));
connect(reply, SIGNAL(sslErrors(QList<QSslError>)),
        this, SLOT(slotSslErrors(QList<QSslError>)));