Fonction InternetReadFile (wininet.h)
Lit les données à partir d’un handle ouvert par la fonction InternetOpenUrl, FtpOpenFile ou HttpOpenRequest .
Syntaxe
BOOL InternetReadFile(
[in] HINTERNET hFile,
[out] LPVOID lpBuffer,
[in] DWORD dwNumberOfBytesToRead,
[out] LPDWORD lpdwNumberOfBytesRead
);
Paramètres
[in] hFile
Handle retourné par un appel précédent à InternetOpenUrl, FtpOpenFile ou HttpOpenRequest.
[out] lpBuffer
Pointeur vers une mémoire tampon qui reçoit les données.
[in] dwNumberOfBytesToRead
Nombre d’octets à lire.
[out] lpdwNumberOfBytesRead
Pointeur vers une variable qui reçoit le nombre d’octets lus. InternetReadFile définit cette valeur sur zéro avant d’effectuer un travail ou une vérification des erreurs.
Valeur retournée
Retourne LA valeur TRUE si elle réussit ou FALSE dans le cas contraire. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError. Une application peut également utiliser InternetGetLastResponseInfo si nécessaire.
Remarques
InternetReadFile fonctionne comme la fonction ReadFile de base, à quelques exceptions près. En règle générale, InternetReadFile récupère les données d’un handle HINTERNET sous la forme d’un flux séquentiel d’octets. La quantité de données à lire pour chaque appel à InternetReadFile est spécifiée par le paramètre dwNumberOfBytesToRead et les données sont retournées dans le paramètre lpBuffer . Une lecture normale récupère le dwNumberOfBytesToRead spécifié pour chaque appel à InternetReadFile jusqu’à ce que la fin du fichier soit atteinte. Pour vous assurer que toutes les données sont récupérées, une application doit continuer à appeler la fonction InternetReadFile jusqu’à ce que la fonction retourne TRUE et que le paramètre lpdwNumberOfBytesRead soit égal à zéro. Cela est particulièrement important si les données demandées sont écrites dans le cache, car sinon, le cache ne sera pas correctement mis à jour et le fichier téléchargé ne sera pas validée dans le cache. Notez que la mise en cache se produit automatiquement, sauf si la demande d’origine d’ouverture du flux de données définit l’indicateur INTERNET_FLAG_NO_CACHE_WRITE .
Lorsqu’une application récupère un handle à l’aide d’InternetOpenUrl, WinINet tente de faire ressembler toutes les données à un téléchargement de fichier, afin de faciliter la lecture à partir d’Internet pour l’application. Pour certains types d’informations, comme les listes de répertoires de fichiers FTP, il convertit les données à retourner par
InternetReadFile dans un flux HTML. Il le fait ligne par ligne. Par exemple, il peut convertir une liste de répertoires FTP en ligne HTML et renvoyer ce code HTML à l’application.
WinINet tente d’écrire le code HTML dans la mémoire tampon lpBuffer une ligne à la fois. Si la mémoire tampon de l’application est trop petite pour s’adapter à au moins une ligne de code HTML généré, le code d’erreur ERROR_INSUFFICIENT_BUFFER est retourné comme indication à l’application qu’elle a besoin d’une mémoire tampon plus grande. En outre, les lignes converties peuvent ne pas remplir complètement la mémoire tampon, de sorte qu’InternetReadFile peut retourner avec moins de données dans lpBuffer que demandé. Les lectures suivantes récupèrent tout le code HTML converti. L’application doit à nouveau case activée que toutes les données sont récupérées comme décrit précédemment.
Comme tous les autres aspects de l’API WinINet, cette fonction ne peut pas être appelée en toute sécurité à partir de DllMain ou des constructeurs et destructeurs d’objets globaux.
Lors de l’exécution asynchrone, si un appel à InternetReadFile n’aboutit pas à une transaction terminée, il retourne FALSE et un appel ultérieur à GetLastError retourne ERROR_IO_PENDING. Une fois la transaction terminée, internetStatusCallback spécifié dans un appel précédent à InternetSetStatusCallback est appelé avec INTERNET_STATUS_REQUEST_COMPLETE.
Configuration requise
Condition requise | Valeur |
---|---|
Client minimal pris en charge | Windows 2000 Professionnel [applications de bureau uniquement] |
Serveur minimal pris en charge | Windows 2000 Server [applications de bureau uniquement] |
Plateforme cible | Windows |
En-tête | wininet.h |
Bibliothèque | Wininet.lib |
DLL | Wininet.dll |