2016-04-25 66 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