Fortschrittsanzeige mit der HTTP -Datei mit WinHTTP herunterladen
-
05-07-2019 - |
Frage
Ich möchte eine Fortschrittsleiste in meiner C ++ - Windows -Anwendung implementieren, wenn ich eine Datei mit WinHTTP herunterladen kann. Irgendeine Idee, wie man das macht? Es sieht so aus, als ob der WinHttpsetStatuscallback das ist, was ich verwenden möchte, aber ich sehe nicht, nach welcher Benachrichtigung ich suchen muss ... oder wie man den "prozentualen heruntergeladen" bekommt ...
Hilfe!
Vielen Dank!
Lösung
Pro Die Dokumente:
WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE
Daten können mit winHttpreaddata abgerufen werden. Der Parameter lpvstatusinformation zeigt auf ein DWORD, das die Anzahl der verfügbaren Datenbytes enthält. Der Parameter dwstatusinformationLength selbst beträgt 4 (die Größe eines DWORD).
und
WINHTTP_CALLBACK_STATUS_READ_COMPLETE
Daten wurden erfolgreich vom Server gelesen. Der Parameter lpvStatusinformation enthält einen Zeiger auf den im Aufruf an Winhttpreaddata angegebenen Puffer. Der Parameter dwstatusinformationLength enthält die Anzahl der gelesenen Bytes.
Es mag andere relevante Benachrichtigungen geben, aber diese beiden scheinen die wichtigsten zu sein. Das Erhalten von "Prozent" ist nicht unbedingt trivial, da Sie möglicherweise nicht wissen, wie viel Daten Sie erhalten (nicht alle Downloads haben die Inhaltslänge-Set ...); Sie können die Header mit:
WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE
Der Antwortheader wurde empfangen und ist mit WinHttpQueryHeaders erhältlich. Der Parameter lpvstatusinformation ist null.
Und wenn die Inhaltslänge verfügbar ist, kann der Prozentsatz berechnet werden, indem die Gesamtzahl der Bytes an jeder "verfügbaren" Daten zur Verfügung steht, andernfalls ist Ihre Vermutung so gut wie meine ;-).