2016-04-25 79 views
0

我一直在寻找这个问题的答案,但无法找到它。如何保证通过QNetworkAccessManager下载的文件没有损坏?

我使用QNetworkAccessManager从Web服务器上下载文件,我想确保这个文件下载没有任何损坏。

我曾经为每个文件实现了一个校验和,但是这会变得单调乏味而且可能是不必要的。我以前只是认为腐败可能发生在QNetworkAccessManager。 先决条件是从调用QNetworkAccessManager的方法get()返回的QNetworkReply对象已发出完成的信号。

如何确保通过QNetworkAccessManager从网络服务器下载的文件不会被破坏?

+1

你是什么意思“损坏”的文件?你是否尝试过信号错误(error(QNetworkReply :: NetworkError))? – IAmInPLS

+0

对不起,如果我的问题有点不清楚,假设没有发出错误信号并发出完成的信号,那么下载的文件是否保证完成? (我正在使用readyRead()信号读取下载的数据) – Phat

+0

否,因为即使您的文件下载已损坏,始终发出完成的信号。我认为您必须检查下载的文件大小(请参阅[这里](http://doc.qt.io/qt-5/qnetworkreply.html#uploadProgress)) – IAmInPLS

回答

1

TCP/IP并不保证数据的无差错传输,所以即使您从QNetworkAccessManager得到正确大小的文件,该文件仍然可能会损坏。您需要使用散列来检测比TCP/IP更好的错误。这与QNetworkAccessManager本身无关,您的网络浏览器也会遇到同样的问题:即使一切看上去都很微妙,但偶尔会出现损坏的下载。

+0

听起来很合理,而且是我以前所设想的。所以我仍然应该使用散列。 – Phat