2014-09-23 1 views
-2

J'écris un gestionnaire de téléchargement très simple qui ne peut tout simplement Download - Pause-Resume, comment est-il possible de resume le téléchargement à partir du point exact du fichier arrêter avant, bien en fait la seule chose que je cherche est de savoir comment définir le pointeur de fichier côté serveur et puis je peux le télécharger à partir du point exact que je voulais par InternetReadFile(Any Other Functions are accepted if you know a better way for it). Bien que, InternetSetFilePointer Never works for me :) et je ne veux pas utiliser BITS. Je pense que cela peut se produire en envoyant un en-tête mais je ne sais pas quoi et comment l'envoyer.Reprendre la capacité pour un simple gestionnaire de téléchargement (C++ - WinInet)

Répondre

1

Vous recherchez l'en-tête Range. Utilisez HttpAddRequestHeaders() pour ajouter un en-tête de requête personnalisé Range indiquant au serveur la plage d'octets que vous souhaitez. Voir RFC 2616 Section 14.35 pour la syntaxe.

Si le serveur prend en charge les plages (utilisation HttpQueryInfo(HTTP_QUERY_ACCEPT_RANGES) pour vérifier), il envoie un code d'état 206 au lieu d'un code d'état 200 (utilisez HttpQueryInfo(HTTP_QUERY_STATUS_CODE) pour vérifier). Si 206 est reçu, recherchez simplement votre fichier existant à la position de reprise, puis lisez les données de réponse telles quelles dans votre fichier.

Si 200 est reçu, le fichier commence à partir du début, donc soit:

  1. tronquer le fichier existant et commencer à écrire frais

  2. chercher le fichier, lire et jeter le données de réponse jusqu'à ce qu'il atteigne la position désirée, puis lire les données restantes dans votre fichier.

Traitez tout autre code d'état comme un échec de téléchargement.

Questions connexes