Funzione InternetReadFile (wininet.h)

Legge i dati da un handle aperto dalla funzione InternetOpenUrl, FtpOpenFile o HttpOpenRequest .

Sintassi

BOOL InternetReadFile(
  [in]  HINTERNET hFile,
  [out] LPVOID    lpBuffer,
  [in]  DWORD     dwNumberOfBytesToRead,
  [out] LPDWORD   lpdwNumberOfBytesRead
);

Parametri

[in] hFile

Handle restituito da una chiamata precedente a InternetOpenUrl, FtpOpenFile o HttpOpenRequest.

[out] lpBuffer

Puntatore a un buffer che riceve i dati.

[in] dwNumberOfBytesToRead

Numero di byte da leggere.

[out] lpdwNumberOfBytesRead

Puntatore a una variabile che riceve il numero di byte letti. InternetReadFile imposta questo valore su zero prima di eseguire qualsiasi controllo di lavoro o errore.

Valore restituito

Restituisce TRUE se ha esito positivo o FALSE in caso contrario. Per informazioni dettagliate sull'errore, chiamare GetLastError. Un'applicazione può anche usare InternetGetLastResponseInfo quando necessario.

Commenti

InternetReadFile funziona molto come la funzione ReadFile di base, con alcune eccezioni. In genere, InternetReadFile recupera i dati da un handle XAMLNET come flusso sequenziale di byte. La quantità di dati da leggere per ogni chiamata a InternetReadFile viene specificata dal parametro dwNumberOfBytesToRead e i dati vengono restituiti nel parametro lpBuffer . Una lettura normale recupera l'oggetto dwNumberOfBytesToRead specificato per ogni chiamata a InternetReadFile fino alla fine del file. Per assicurarsi che tutti i dati vengano recuperati, un'applicazione deve continuare a chiamare la funzione InternetReadFile fino a quando la funzione restituisce TRUE e il parametro lpdwNumberOfBytesRead è uguale a zero. Ciò è particolarmente importante se i dati richiesti vengono scritti nella cache, perché in caso contrario la cache non verrà aggiornata correttamente e il file scaricato non verrà eseguito il commit nella cache. Si noti che la memorizzazione nella cache viene eseguita automaticamente a meno che la richiesta originale non apri il flusso di dati impostato il flag di INTERNET_FLAG_NO_CACHE_WRITE .

Quando un'applicazione recupera un handle usando InternetOpenUrl, WinINet tenta di rendere tutti i dati simili a un download di file, in modo da semplificare la lettura da Internet per l'applicazione. Per alcuni tipi di informazioni, ad esempio elenchi di directory file FTP, converte i dati da restituire da
InternetReadFile in un flusso HTML. Questa operazione viene eseguita in base alla riga. Ad esempio, può convertire un elenco di directory FTP in una riga di HTML e restituire questo CODICE HTML all'applicazione.

WinINet tenta di scrivere il codice HTML nel buffer lpBuffer di una riga alla volta. Se il buffer dell'applicazione è troppo piccolo per adattarsi a almeno una riga di HTML generato, il codice di errore ERROR_INSUFFICIENT_BUFFER viene restituito come indicazione all'applicazione che necessita di un buffer più grande. Inoltre, le righe convertite potrebbero non riempire completamente il buffer, quindi InternetReadFile può restituire con meno dati in lpBuffer rispetto alla richiesta. Le letture successive recuperano tutto il codice HTML convertito. L'applicazione deve verificare di nuovo che tutti i dati vengano recuperati come descritto in precedenza.

Come tutti gli altri aspetti dell'API WinINet, questa funzione non può essere chiamata in modo sicuro dall'interno di DllMain o dai costruttori e distruttori degli oggetti globali.

Quando si esegue in modo asincrono, se una chiamata a InternetReadFile non genera una transazione completata, restituirà FALSE e una chiamata successiva a GetLastError restituirà ERROR_IO_PENDING. Al termine della transazione, InternetStatusCallback specificato in una chiamata precedente a InternetSetStatusCallback verrà chiamato con INTERNET_STATUS_REQUEST_COMPLETE.

Nota WinINet non supporta le implementazioni del server. Inoltre, non deve essere usato da un servizio. Per le implementazioni o i servizi server usano Microsoft Windows HTTP Services (WinHTTP).
 

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione wininet.h
Libreria Wininet.lib
DLL Wininet.dll

Vedi anche

Funzioni comuni

Funzioni WinINet