次の方法で共有


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 は 、作業またはエラー チェックを行う前に、この値を 0 に設定します。

戻り値

成功した場合は TRUE 、それ以外の場合 は FALSE を 返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。 アプリケーションでは、必要に応じて InternetGetLastResponseInfo を使用することもできます。

注釈

InternetReadFile は 、いくつかの例外を除いて、基本 の ReadFile 関数とほぼ同じように動作します。 通常、 InternetReadFile は 、バイトのシーケンシャル ストリームとして HINTERNET ハンドルからデータを取得します。 InternetReadFile の呼び出しごとに読み取るデータの量は dwNumberOfBytesToRead パラメーターで指定され、データは lpBuffer パラメーターで返されます。 通常の読み取りでは、ファイルの末尾に達するまで、InternetReadFile の呼び出しごとに指定された dwNumberOfBytesToRead を取得します。 すべてのデータが確実に取得されるようにするには、アプリケーションは、関数が TRUE を返し、lpdwNumberOfBytesRead パラメーターが 0 になるまで InternetReadFile 関数を呼び出し続ける必要があります。 これは、要求されたデータがキャッシュに書き込まれる場合に特に重要です。そうしないと、キャッシュが正しく更新されず、ダウンロードしたファイルがキャッシュにコミットされないためです。 データ ストリームを開く元の要求が INTERNET_FLAG_NO_CACHE_WRITE フラグを設定しない限り、キャッシュは自動的に行われることに注意してください。

アプリケーションが InternetOpenUrl を使用してハンドルを取得すると、WinINet は、アプリケーションのインターネットからの読み取りを容易にするために、すべてのデータをファイルのダウンロードのように見せようとします。 FTP ファイル ディレクトリの一覧など、一部の種類の情報では、 によって返されるデータが変換されます。
InternetReadFile から HTML ストリームへ。 これは行ごとに行われます。 たとえば、FTP ディレクトリリストを HTML 行に変換し、この HTML をアプリケーションに返すことができます。

WinINet は、 HTML を lpBuffer バッファーに一度に 1 行ずつ書き込もうとします。 アプリケーションのバッファーが小さすぎて、生成された HTML の少なくとも 1 行に収まらない場合、エラー コード ERROR_INSUFFICIENT_BUFFER は、より大きなバッファーが必要であることをアプリケーションに示すために返されます。 また、変換された行がバッファーを完全に満たさない可能性があるため、 InternetReadFilelpBuffer 内の要求よりも少ないデータを返すことができます。 後続の読み取りでは、変換されたすべての HTML が取得されます。 アプリケーションは、前に説明したように、すべてのデータが取得されることを再度チェックする必要があります。

WinINet API の他のすべての側面と同様に、この関数を DllMain またはグローバル オブジェクトのコンストラクターとデストラクター内から安全に呼び出すことはできません。

InternetReadFile を呼び出してもトランザクションが完了しない場合、非同期で実行すると、FALSE が返され、GetLastError の後続の呼び出しはERROR_IO_PENDINGを返します。 トランザクションが完了すると、 InternetSetStatusCallback の前回の呼び出しで指定された InternetStatusCallbackINTERNET_STATUS_REQUEST_COMPLETEで呼び出されます。

メモ WinINet では、サーバーの実装はサポートされていません。 また、サービスから使用しないでください。 サーバーの実装またはサービスの場合は、 Microsoft Windows HTTP サービス (WinHTTP) を使用します。
 

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー wininet.h
Library Wininet.lib
[DLL] Wininet.dll

こちらもご覧ください

共通関数

WinINet 関数