ReadFile |
Declare Function Api_ReadFile& Lib "kernel32" Alias "ReadFile" (ByVal hFile&, lpBuffer As Any, ByVal nNumberOfBytesToRead&, lpNumberOfBytesRead&, lpOverlapped&) |
Declare Function ReadFile Lib "kernel32" Alias "ReadFile" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, lpOverlapped As OVERLAPPED) As Long |
|
ファイルからデータを読み取る。ファイルポインタの現在の位置が、読み取りの開始位置になる。読み取りが完了すると、ファイルポインタの位置は、実際に読み取ったバイト数だけ進む。ただし、オーバーラップ I/O(非同期 I/O)を指定してファイルのハンドルを作成した場合は、読み取り操作が完了した後、アプリケーション側でファイルポインタを調整する。 |
|
パラメータ
このハンドルは、GENERIC_READ アクセス権を指定して作成したものでなければならない。
いた任意のハンドル、または socket と accept どちらかの関数が返したソケットのハンドルを指定する。 通信リソース、または socket と accept どちらかの関数が返したソケットのハンドルを指定する。メールスロット、名前付きパイプ、ディスクフ
ァイルに対する非同期読み取り操作はサポートしていません。 何らかの作業やエラーのチェックを行う前に、ReadFile はこの値を 0 に設定する。名前付きパイプに対してこの関数を実行し、戻り値が 0 以外(TRUE)である場合に、この変数に値 0 が格納されたときは、メッセージモードのパイプのもう一方の側が、 nNumberOfBytesToWrite パラメータを 0 に設定して WriteFile 関数を呼び出した(つまり、何も書き込まずに、ファイルのタイムスタンプを
更新しただけ)ことを意味する。 ん。lpOverlapped パラメータで有効なポインタを指定した場合、lpNumberOfBytesRead パラメータで NULL を指定できる。 オーバーラップ読み取り操作を行う場合、GetOverlappedResult 関数を呼び出すと、読み取りの終わったバイト数を取得できる。 hFile が I/O 完了ポートに関連付けられている場合、GetQueuedCompletionStatus 関数を呼び出すと、読み取りの終わったバイト数を取
得できる。
のハンドルを指している場合、この構造体は必須である。 NULL を指定できない。このパラメータでは、1 個の有効な OVERLAPPED 構造体を指定しなければならない。もしこの状況で、
lpOverlapped パラメータで NULL を指定すると、この関数は、読み取り操作が完了したと間違って通知することがある。 ンタを指定した場合、OVERLAPPED 構造体で指定したオフセットでファイルの非同期読み取りが開始され、ReadFile はファイルの読み取 りが完了する前に制御を返すことがある。この場合、ReadFile 関数は 0(FALSE)を返し、GetLastError 関数は ERROR_IO_PENDING を返す。この結果、呼び出し側プロセスは読み取り操作が完了する前に、他の作業を実行できる。
その後、読み取り操作が完了すると、OVERLAPPED 構造体で指定したイベントがシグナル状態になる。 を指定した場合、ファイルポインタの現在の位置からファイルの同期読み取りが開始され、ReadFile は、読み取りが完了すると制御を返
す。 lpOverlapped パラメータで有効なポインタを指定した場合、OVERLAPPED 構造体で指定したオフセットでファイルの同期読み取りが開始さ
れ、ReadFile は、読み取りが完了すると制御を返す。 ならない。OVERLAPPED 構造体へのポインタを指定すると、この関数は失敗する。ただし、Windows 95/98 は、シリアルポートとパラレ
ルポートに対するオーバーラップ I/O をサポートしている。
パイプの書き込み側で書き込みが完了するか、指定されたバイト数の読み取りが終わるか、エラーが発生した場合である。 を超えていたことを示す。ただし、FILE_FLAG_OVERLAPPED フラグを指定してファイルを開いていた場合、lpOverlapped パラメータに NULL 以外の値を指定すると、戻り値は 0(FALSE)になる。このとき、ファイルポインタがファイルの終わりを超えていると、
GetLastError 関数は ERROR_HANDLE_EOF を返す。 |