2024年3月27日发(作者:)

ReadFile函数从文件指针指定的位置读取数据。读操作完成后,文件指针将根据实际

读出的数据自动进行调整,除非文件句柄是以OVERLAPPED属性值打开的。如果是以

OVERLAPPED打开的I/O,应用程序就需要自己手动调整文件指针。

这个函数被设计成兼有同步和异步操作。ReadFileEx函数则设计成只支持异步操作,

异步操作允许应用程序在读文件期间可以同时进行其他的操作。

函数原型:

BOOL ReadFile(

HANDLE hFile, // handle to file

LPVOID lpBuffer, // data buffer

DWORD nNumberOfBytesToRead, // number of bytes to read

LPDWORD lpNumberOfBytesRead, // number of bytes read

LPOVERLAPPED lpOverlapped // overlapped buffer

);

【Parameters】

1、hFile

文件句柄(必须具有GENERIC_READ访问权限)。

在Windows NT/2000/XP平台上:对于异步读操作,hFile可以是由CreateFile函数

以FILE_FLAG_OVERLAPPED方式打开的任何句柄,或者一个由socket或accept函数返

回的socket句柄。

在Windows 95/98/Me平台上:对于邮槽、命名管道和磁盘文件不能使用异步读操作。

2、lpBuffer

用来接收从文件中读出的数据的缓冲区指针。

3、nNumberOfBytesToRead

指明要读的字节总数。

4、lpNumberOfBytesRead

一个变量指针,用来存储实际传输的字节总数。ReadFile在做所有事情(包括错误检查)

之前,先将这个值赋为0。当ReadFile从一个命名管道上返回TRUE时这个参数为0,说

明消息管道另一端调用WriteFile时设置的nNumberOfBytesToWrite 参数为0。

在Windows NT/2000/XP平台上:如果lpOverlapped 为NULL,则

lpNumberOfBytesRead不能为NULL。如果lpOverlapped 不是NULL,

lpNumberOfBytesRead可以设为NULL。如果是一个overlapped形式的读操作,我们

可以动用GetOverlappedResult函数来获得传输的实际字节数。如果hFile关联的是一个