readfile2
基本内容
由于 ReadFile 已经被创建,故建立本条。
4.15.46 ReadFile
函数功能:该函数从文件指针指示的位置开始从文件读数据,在读操作完成后,如果文件句柄不是用重叠属性来创建,则文件指针用实际读的字数来调整。
如果文件句柄为重叠的输入和输出(I/O)操作而创建,则应用程序必须在读操作之后调整文件指针的位置。
函数原型:BOOL ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped);
参数:
hFile:指向要读的文件的句柄,文件句柄一定用 GENERIC_READ 对文件的访问来创建。
Windows NT:对于异步读操作,hFile 可为任何一个句柄,该句柄可以通过 CreatFile函数用 FILE_FLAG_OVERLAPPED 标志来打开或通过插孔或接收函数返回的插孔句柄来打开。
Windows 95:对于异步读操作,hFILE 可以是一个通信源、邮件插孔或命名的管道句柄,此管道句柄通过 CreatFile 用 FILE_FLAG_OVERLAPPED 标志来打开或通过插孔或接收函数返回的插孔句柄来打开,Windows 95 不支持磁盘文件的异步读操作。
lpBuffer:指向一个从文件存取数据的缓冲区的指针。
nNumberOfBytesToRead:从文件读的字节数目。
lpNumberOfBytesRead:指向一个读字节数的指针,在做任何工作或错误检测之前,ReadFile 把此值设置为零,当 ReadFile 在命名管道上返回 TRUE 时,如果此参数为零,则用 nNumberOfBytesToWrite 调用 WriteFile 函数的信息模块将管道的另一端设置为零。
Windows NT:如果 lpOverlapped 为 NULL,则 lpNumberOfBytesRead 不为 NULL;如果 lpOverlapped 不为 NULL,则 lpNumberOfBytesRead 可以为 NULL,如果这是一个重叠写操作,则可通过调用 GetQueuedCompletionStatus 来得到读字节的数目。
Windows 95 或 Windows 98:此参数不能为 NULL。
lpOverlapped:指向一个OVERLAPPED 结构的指针,如果用 FILE_FLAG_OVERLAPPED 来创建 hFile,则需要此结构,如果用 FILE_FLAG_OVERLAPPED 来打开 hFile,则 lpOverlapped 参数一定不是 NULL,它必须指向一个有效的 OVERLAPPED结构,如果 hFile 是由 FILE_FLAG_OVERLAPPED 创建且 lpOverlapped 为 NULL,则函数可不正确地记录关于读操作是完全的。
如果 hFile 用 FILE_FLAG_OVERLAPPED 打开,且 lpOverlapped 不为 NULL,则读操作在 OVERLAPPED 结构中指定的位移处开始,在完成操作之前,且 ReadFile 可以返回在这种情况下 ReadFile 返回 FALSE 且 GetLastError 函数返回 ERROR_IO_PENDING 这使在读操作完成时,调用应用系统继续。在 OVERLAPPED 结构中指定的事件被设置为读操作完成的发送信号状态。
如果 hFile 不用 FILE_FLAG_OVERLAPPED 打开,且 lpOverlapped 不为 NULL,则读操作在当前文件位置开始且至操作完成,ReadFile 函数返回。
如果 hFile 不用 FILE_FLAG_OVERLAPPED 打开,且 lpOverlapped 不为 NULL,则读操作 OVERLAPPED 结构指定的位移处开始,直到操作完成,ReadFile 函数返回。