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.

Nota O WinINet não dá suporte a implementações de servidor. Além disso, ele não deve ser usado de um serviço. Para implementações ou serviços de servidor, use Os Serviços HTTP do Microsoft Windows (WinHTTP).
 

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

Confira também

Funções comuns

Funções WinINet