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 Services (WinHTTP)
 

規格需求

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

另請參閱

一般函式

WinINet 函式