InternetReadFile 函式 (wininet.h)

InternetOpenUrlFtpOpenFileHttpOpenRequest 函式所開啟的句柄讀取數據。

語法

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

參數

[in] hFile

從先前呼叫 InternetOpenUrlFtpOpenFileHttpOpenRequest 傳回的句柄。

[out] lpBuffer

接收數據的緩衝區指標。

[in] dwNumberOfBytesToRead

要讀取的位元組數目。

[out] lpdwNumberOfBytesRead

接收讀取位元組數目的變數指標。 InternetReadFile 會將此值設定為零,再進行任何工作或錯誤檢查。

傳回值

如果成功,則傳回 TRUE ,否則傳回 FALSE 。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。 應用程式也可以在必要時使用 InternetGetLastResponseInfo

備註

InternetReadFile 的運作方式與基底 ReadFile 函式類似,但有一些例外狀況。 一般而言, InternetReadFile 會從 HINTERNET 句柄擷取數據做為位元組的循序數據流。 每個 對 InternetReadFile 呼叫所要讀取的數據量是由 dwNumberOfBytesToRead 參數所指定,而且數據會在 lpBuffer 參數中傳回。 一般讀取會針對 InternetReadFile 的每個呼叫擷取指定的 dwNumberOfBytesToRead,直到到達檔案結尾為止。 為了確保擷取所有數據,應用程式必須繼續呼叫 InternetReadFile 函式,直到函式傳回 TRUElpdwNumberOfBytesRead 參數等於零為止。 如果要求的數據寫入快取,這特別重要,因為否則不會正確更新快取,且下載的檔案不會認可至快取。 請注意,除非原始要求開啟數據流集 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

注意 WinINet 不支援伺服器實作。 此外,它不應該從服務使用。 對於伺服器實作或服務,請使用 Microsoft Windows HTTP 服務 (WinHTTP)
 

規格需求

需求
最低支援的用戶端 Windows 2000 專業版 [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平台 Windows
標頭 wininet.h
程式庫 Wininet.lib
Dll Wininet.dll

另請參閱

通用函式

WinINet 函式