Função InternetReadFile (wininet.h)
Lê dados de um identificador aberto pela função InternetOpenUrl, FtpOpenFile ou HttpOpenRequest .
Sintaxe
BOOL InternetReadFile(
[in] HINTERNET hFile,
[out] LPVOID lpBuffer,
[in] DWORD dwNumberOfBytesToRead,
[out] LPDWORD lpdwNumberOfBytesRead
);
Parâmetros
[in] hFile
Identificador retornado de uma chamada anterior para InternetOpenUrl, FtpOpenFile ou HttpOpenRequest.
[out] lpBuffer
Ponteiro para um buffer que recebe os dados.
[in] dwNumberOfBytesToRead
Número de bytes a serem lidos.
[out] lpdwNumberOfBytesRead
Ponteiro para uma variável que recebe o número de bytes lidos. InternetReadFile define esse valor como zero antes de fazer qualquer verificação de erro ou trabalho.
Retornar valor
Retorna TRUE se tiver êxito ou FALSE caso contrário. Para obter informações de erro estendidas, chame GetLastError. Um aplicativo também pode usar InternetGetLastResponseInfo quando necessário.
Comentários
InternetReadFile opera muito parecido com a função ReadFile base, com algumas exceções. Normalmente, o InternetReadFile recupera dados de um identificador HINTERNET como um fluxo sequencial de bytes. A quantidade de dados a serem lidos para cada chamada para InternetReadFile é especificada pelo parâmetro dwNumberOfBytesToRead e os dados são retornados no parâmetro lpBuffer . Uma leitura normal recupera o dwNumberOfBytesToRead especificado para cada chamada para InternetReadFile até que o final do arquivo seja atingido. Para garantir que todos os dados sejam recuperados, um aplicativo deve continuar a chamar a função InternetReadFile até que a função retorne TRUE e o parâmetro lpdwNumberOfBytesRead seja igual a zero. Isso é especialmente importante se os dados solicitados forem gravados no cache, pois caso contrário, o cache não será atualizado corretamente e o arquivo baixado não será confirmado no cache. Observe que o cache ocorre automaticamente, a menos que a solicitação original para abrir o fluxo de dados defina o sinalizador INTERNET_FLAG_NO_CACHE_WRITE .
Quando um aplicativo recupera um identificador usando InternetOpenUrl, o WinINet tenta fazer com que todos os dados se pareçam com um download de arquivo, em um esforço para facilitar a leitura da Internet para o aplicativo. Para alguns tipos de informações, como listagens de diretório de arquivos FTP, ele converte os dados a serem retornados por
InternetReadFile para um fluxo HTML. Ele faz isso linha a linha. Por exemplo, ele pode converter uma listagem de diretório FTP em uma linha de HTML e retornar esse HTML para o aplicativo.
WinINet tenta gravar o HTML no buffer lpBuffer de uma linha de cada vez. Se o buffer do aplicativo for muito pequeno para se ajustar a pelo menos uma linha de HTML gerado, o código de erro ERROR_INSUFFICIENT_BUFFER será retornado como uma indicação para o aplicativo de que ele precisa de um buffer maior. Além disso, as linhas convertidas podem não preencher completamente o buffer, portanto, o InternetReadFile pode retornar com menos dados no lpBuffer do que o solicitado. As leituras subsequentes recuperarão todo o HTML convertido. O aplicativo deve marcar novamente que todos os dados sejam recuperados, conforme descrito anteriormente.
Como todos os outros aspectos da API WinINet, essa função não pode ser chamada com segurança de dentro do DllMain ou dos construtores e destruidores de objetos globais.
Ao executar de forma assíncrona, se uma chamada para InternetReadFile não resultar em uma transação concluída, ela retornará FALSE e uma chamada subsequente para GetLastError retornará ERROR_IO_PENDING. Quando a transação for concluída, o InternetStatusCallback especificado em uma chamada anterior para InternetSetStatusCallback será chamado com INTERNET_STATUS_REQUEST_COMPLETE.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 2000 Professional [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows 2000 Server [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | wininet.h |
Biblioteca | Wininet.lib |
DLL | Wininet.dll |