ReadFileScatter

ファイルからデータを読み取り、複数のバッファの配列に格納する。

ReadFileScatter hFile, aSegmentArray, nNumberOfBytesToRead, lpReserved, lpOverlapped

hFile : [intptr] 読み取り対象のファイルへのハンドル。ファイルハンドルは **GENERIC_READ** 権限、および **FILE_FLAG_OVERLAPPED** と **FILE_FLAG_NO_BUFFERING** フラグで作成する必要がある。詳細は File Security and Access Rights を参照。
aSegmentArray : [var] データを受け取る [FILE_SEGMENT_ELEMENT structure](../winnt/ns-winnt-file_segment_element.md) バッファの配列へのポインタ。この共用体の説明は [Remarks](#remarks) を参照。各要素は 1 ページ分のデータを受け取れる。> [!NOTE] > システムページサイズを判定するには GetSystemInfo を使用する。配列は *nNumberOfBytesToRead* バイトのデータを格納するのに十分な要素数と、終端 **NULL** のための 1 要素を加えて含む必要がある。たとえば 40 KB を読み取る場合でページサイズが 4 KB の場合、配列はデータ用の 10 要素と **NULL** 用の 1 要素で合計 11 要素を持つ必要がある。各バッファは少なくともシステムメモリページのサイズ以上であり、システムメモリページサイズの境界にアラインされていなければならない。システムは各バッファにシステムメモリ 1 ページ分のデータを読み取る。関数はデータを順序通りに各バッファへ格納する。たとえば、まず最初のバッファ、次に 2 番目のバッファ、というように、各バッファが埋まり全データが格納されるかバッファがなくなるまで続く。
nNumberOfBytesToRead : [int] ファイルから読み取るバイト総数。*aSegmentArray* の各要素はこの総数の 1 ページ分を格納する。ファイルは **FILE_FLAG_NO_BUFFERING** で開く必要があるため、バイト数はファイルが存在するファイルシステムのセクタサイズの倍数でなければならない。
lpReserved : [var] このパラメータは将来の使用のために予約されており、**NULL** でなければならない。
lpOverlapped : [var] OVERLAPPED データ構造体へのポインタ。**ReadFileScatter** 関数は有効な OVERLAPPED 構造体を必要とする。*lpOverlapped* パラメータは **NULL** にできない。**ReadFileScatter** 関数は OVERLAPPED 構造体の **Offset** および **OffsetHigh** メンバで指定された位置からファイルのデータを読み取り始める。**ReadFileScatter** 関数は読み取り操作が完了する前に戻ることがある。その場合、**ReadFileScatter** 関数は 0 を返し、GetLastError 関数は **ERROR_IO_PENDING** を返す。この **ReadFileScatter** の非同期動作により、呼び出し側プロセスは読み取り操作が完了する間処理を続行できる。読み取り操作の完了に関する情報を取得するには GetOverlappedResult、HasOverlappedIoCompleted、または GetQueuedCompletionStatus 関数を呼び出せる。詳細は Synchronous and Asynchronous I/O を参照。

(プラグイン / モジュール : kernel32.dll)

解説

ファイルからデータを読み取り、複数のバッファの配列に格納する。

[戻り値]
関数が成功した場合、戻り値は 0 以外である。関数が失敗した場合、戻り値は 0 である。拡張エラー情報を取得するには
GetLastError 関数を呼び出す。**ReadFileScatter**
がファイル終端(EOF)を越えて読み取ろうとした場合、その操作に対する GetOverlappedResult の呼び出しは
**FALSE** を返し、GetLastError は **ERROR_HANDLE_EOF**
を返す。関数が読み取り操作の完了前に戻った場合、関数は 0 を返し、GetLastError は **ERROR_IO_PENDING**
を返す。

[備考]
この関数は Itanium ベースシステムの WOW64 上の 32
ビットアプリケーションではサポートされない。[FILE_SEGMENT_ELEMENT
structure](../winnt/ns-winnt-file_segment_element.md) は次のように定義されている。
(以下省略)

情報

プラグイン / モジュールkernel32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の kernel32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_kernel32_gen2.hs