Indicazione di avanzamento con il download di file HTTP tramite WinHTTP
-
05-07-2019 - |
Domanda
Voglio implementare una barra di avanzamento nella mia applicazione Windows C ++ durante il download di un file usando WinHTTP. Qualche idea su come farlo? Sembra che WinHttpSetStatusCallback sia quello che voglio usare, ma non vedo quale notifica cercare ... o come ottenere la "percentuale scaricata" ...
Aiuto!
Grazie!
Soluzione
Per i documenti :
WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE
I dati sono disponibili per essere recuperati WinHttpReadData. Il Punti parametro lpvStatusInformation a un DWORD che contiene il numero di byte di dati disponibili. Il Parametro dwStatusInformationLength stesso è 4 (la dimensione di un DWORD).
e
WINHTTP_CALLBACK_STATUS_READ_COMPLETE
I dati sono stati letti correttamente da server. LpvStatusInformation Il parametro contiene un puntatore a buffer specificato nella chiamata a WinHttpReadData. Il Parametro dwStatusInformationLength contiene il numero di byte letti.
Potrebbero esserci altre notifiche pertinenti, ma queste due sembrano essere quelle chiave. Ottenere "percentuale" non è necessariamente banale perché potresti non sapere quanti dati stai ricevendo (non tutti i download hanno una lunghezza dei contenuti impostata ...); puoi ottenere le intestazioni con:
WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE
L'intestazione della risposta è stata ricevuta ed è disponibile con WinHttpQueryHeaders. Il Il parametro lpvStatusInformation è NULL.
e se Content-Length È disponibile, la percentuale può essere calcolata tenendo traccia del numero totale di byte in ciascun "dato disponibile". notifica, altrimenti la tua ipotesi è buona come la mia ;-).