InternetReadFile 函式 (wininet.h)
從 InternetOpenUrl、 FtpOpenFile 或 HttpOpenRequest 函式所開啟的句柄讀取數據。
語法
BOOL InternetReadFile(
[in] HINTERNET hFile,
[out] LPVOID lpBuffer,
[in] DWORD dwNumberOfBytesToRead,
[out] LPDWORD lpdwNumberOfBytesRead
);
參數
[in] hFile
從先前呼叫 InternetOpenUrl、 FtpOpenFile 或 HttpOpenRequest 傳回的句柄。
[out] lpBuffer
接收數據的緩衝區指標。
[in] dwNumberOfBytesToRead
要讀取的位元組數目。
[out] lpdwNumberOfBytesRead
接收讀取位元組數目的變數指標。 InternetReadFile 會將此值設定為零,再進行任何工作或錯誤檢查。
傳回值
如果成功,則傳回 TRUE ,否則傳回 FALSE 。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。 應用程式也可以在必要時使用 InternetGetLastResponseInfo 。
備註
InternetReadFile 的運作方式與基底 ReadFile 函式類似,但有一些例外狀況。 一般而言, InternetReadFile 會從 HINTERNET 句柄擷取數據做為位元組的循序數據流。 每個 對 InternetReadFile 呼叫所要讀取的數據量是由 dwNumberOfBytesToRead 參數所指定,而且數據會在 lpBuffer 參數中傳回。 一般讀取會針對 InternetReadFile 的每個呼叫擷取指定的 dwNumberOfBytesToRead,直到到達檔案結尾為止。 為了確保擷取所有數據,應用程式必須繼續呼叫 InternetReadFile 函式,直到函式傳回 TRUE 且 lpdwNumberOfBytesRead 參數等於零為止。 如果要求的數據寫入快取,這特別重要,因為否則不會正確更新快取,且下載的檔案不會認可至快取。 請注意,除非原始要求開啟數據流集 INTERNET_FLAG_NO_CACHE_WRITE 旗標,否則會自動進行快取。
當應用程式使用 InternetOpenUrl 擷取句柄時,WinINet 會嘗試讓所有數據看起來就像檔案下載一樣,努力讓應用程式更容易從因特網讀取。 對於某些類型的資訊,例如 FTP 檔案目錄清單,它會轉換要傳回的數據
InternetReadFile 至 HTML 數據流。 它會逐行執行這項作業。 例如,它可以將 FTP 目錄清單轉換成一行 HTML,並將此 HTML 傳回至應用程式。
WinINet 會嘗試一次將 HTML 寫入 lpBuffer 緩衝區。 如果應用程式的緩衝區太小而無法容納至少一行產生的 HTML,則會傳回錯誤碼 ERROR_INSUFFICIENT_BUFFER ,表示應用程式需要較大的緩衝區。 此外,已轉換的行可能不會完全填滿緩衝區,因此 InternetReadFile 可以傳回比要求較少的 lpBuffer 數據。 後續讀取將會擷取所有已轉換的 HTML。 應用程式必須再次檢查所有數據是否已擷取,如先前所述。
就像 WinINet API 的其他所有層面一樣,無法在 DllMain 或全域物件的建構函式和解構函式內安全地呼叫此函式。
以異步方式執行時,如果對 InternetReadFile 的呼叫不會產生已完成的交易,則會傳回 FALSE ,而 對 GetLastError 的後續呼叫將會傳回 ERROR_IO_PENDING。 當交易完成時,將會使用 INTERNET_STATUS_REQUEST_COMPLETE呼叫先前呼叫 InternetSetStatusCallback 中指定的 InternetStatusCallback。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 2000 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | wininet.h |
程式庫 | Wininet.lib |
Dll | Wininet.dll |