文件下载-在文件写入前检查错误
File download - check for error before file write
我使用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>)));
相关文章:
- error_code:如何设置和检查错误
- CocoaPod - 在头文件中使用 C++ 时出现 Podspec 检查错误
- 在编写包装现有函数并检查错误的模板函数时,如何使用完美转发?
- swscanf_s - 运行时检查错误
- 为什么C++字符串迭代器不检查错误?
- 如何使用运行时检查错误来修复我的C 格斗游戏
- XCode -Mac App -Bootstrap启动时检查错误
- 挂钩发送/WSASEND返回运行时检查错误#0
- 从整数到枚举值时,如何和何处检查错误
- C .如何检查错误的输入
- C++ 输入字符而不是 int 会导致无限循环.如何检查错误的输入
- 检查错误时重载>>运算符中的无限循环
- 开发基本的C++代码+检查错误/警告
- 在C++中,如何在使用gzstream编写压缩文件时检查错误
- 如何使 cuda-memcheck 在出现泄漏检查错误时返回非零
- 是否可以使用GetLastError检查错误代码是否已恢复
- 何时检查错误,使用 QIODevice 的阻塞接口(QTcpSocket 和 QFile)
- 在调用 recv() 之前检查错误
- C++类型检查错误
- 如何修复配置 PHP 7.0.1 时C++预处理器"/lib/cpp"健全性检查错误