InternetReadFile-Funktion (wininet.h)
Liest Daten aus einem Handle, das von der Funktion InternetOpenUrl, FtpOpenFile oder HttpOpenRequest geöffnet wird.
Syntax
BOOL InternetReadFile(
[in] HINTERNET hFile,
[out] LPVOID lpBuffer,
[in] DWORD dwNumberOfBytesToRead,
[out] LPDWORD lpdwNumberOfBytesRead
);
Parameter
[in] hFile
Handle, das von einem vorherigen Aufruf von InternetOpenUrl, FtpOpenFile oder HttpOpenRequest zurückgegeben wurde.
[out] lpBuffer
Zeiger auf einen Puffer, der die Daten empfängt.
[in] dwNumberOfBytesToRead
Anzahl der zu lesenden Bytes.
[out] lpdwNumberOfBytesRead
Zeiger auf eine Variable, die die Anzahl der gelesenen Bytes empfängt. InternetReadFile legt diesen Wert vor der Arbeit oder Fehlerüberprüfung auf Null fest.
Rückgabewert
Gibt TRUE zurück, wenn erfolgreich, andernfalls FALSE . Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf. Eine Anwendung kann bei Bedarf auch InternetGetLastResponseInfo verwenden.
Hinweise
InternetReadFile funktioniert mit wenigen Ausnahmen ähnlich wie die ReadFile-Basisfunktion . In der Regel ruft InternetReadFile Daten aus einem HINTERNET-Handle als sequenziellen Bytedatenstrom ab. Die Datenmenge, die für jeden Aufruf von InternetReadFile gelesen werden soll, wird durch den dwNumberOfBytesToRead-Parameter angegeben, und die Daten werden im lpBuffer-Parameter zurückgegeben. Ein normaler Lesevorgang ruft die angegebene dwNumberOfBytesToRead für jeden Aufruf von InternetReadFile ab, bis das Ende der Datei erreicht ist. Um sicherzustellen, dass alle Daten abgerufen werden, muss eine Anwendung weiterhin die InternetReadFile-Funktion aufrufen, bis die Funktion TRUE zurückgibt und der lpdwNumberOfBytesRead-Parameter gleich 0 ist. Dies ist besonders wichtig, wenn die angeforderten Daten in den Cache geschrieben werden, da der Cache andernfalls nicht ordnungsgemäß aktualisiert wird und die heruntergeladene Datei nicht in den Cache committet wird. Beachten Sie, dass das Zwischenspeichern automatisch erfolgt, es sei denn, die ursprüngliche Anforderung zum Öffnen des Datenstroms hat das flag INTERNET_FLAG_NO_CACHE_WRITE festgelegt.
Wenn eine Anwendung ein Handle mithilfe von InternetOpenUrl abruft, versucht WinINet, alle Daten wie einen Dateidownload aussehen zu lassen, um das Lesen aus dem Internet für die Anwendung zu vereinfachen. Für einige Arten von Informationen, z. B. FTP-Dateiverzeichnisauflistungen, werden die Daten konvertiert, die von zurückgegeben werden sollen.
InternetReadFile in einen HTML-Stream. Dies erfolgt zeilenweise. Beispielsweise kann es eine FTP-Verzeichnisliste in eine HTML-Zeile konvertieren und diesen HTML-Code an die Anwendung zurückgeben.
WinINet versucht, den HTML-Code eine Zeile nach dem anderen in den lpBuffer-Puffer zu schreiben. Wenn der Puffer der Anwendung zu klein ist, um mindestens eine Zeile generierten HTML-Code zu erfüllen, wird der Fehlercode ERROR_INSUFFICIENT_BUFFER als Hinweis an die Anwendung zurückgegeben, dass sie einen größeren Puffer benötigt. Außerdem füllen konvertierte Zeilen möglicherweise nicht vollständig den Puffer, sodass InternetReadFile mit weniger Daten in lpBuffer als angefordert zurückgeben kann. Nachfolgende Lesevorgänge rufen den gesamten konvertierten HTML-Code ab. Die Anwendung muss erneut überprüfen, ob alle Daten wie zuvor beschrieben abgerufen werden.
Wie alle anderen Aspekte der WinINet-API kann diese Funktion nicht sicher innerhalb von DllMain oder den Konstruktoren und Destruktoren globaler Objekte aufgerufen werden.
Wenn ein Aufruf von InternetReadFile bei der asynchronen Ausführung nicht zu einer abgeschlossenen Transaktion führt, wird FALSE zurückgegeben, und ein späterer Aufruf von GetLastError gibt ERROR_IO_PENDING zurück. Wenn die Transaktion abgeschlossen ist, wird der internetStatusCallback , der in einem vorherigen Aufruf von InternetSetStatusCallback angegeben wurde, mit INTERNET_STATUS_REQUEST_COMPLETE aufgerufen.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 2000 Professional [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows 2000 Server [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | wininet.h |
Bibliothek | Wininet.lib |
DLL | Wininet.dll |