我编写了以下c ++代码以异步读取文件:
#define BUF_SIZE 1024
HANDLE hFile;
DWORD NumberOfBytesRead = 0;
BYTE *buf = (BYTE*)malloc(BUF_SIZE*sizeof(BYTE));
OVERLAPPED overlapped;
overlapped.Offset = overlapped.OffsetHigh = 0;
hFile = CreateFile("C:\\Users\\Desktop\\FOO.cpp",
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
printf("invalid hfile\n");
int i;
i= ReadFile(hFile,
&buf,
BUF_SIZE,
&NumberOfBytesRead,
&overlapped);
if(!i && GetLastError() != ERROR_IO_PENDING)
printf ("ReadFile failed with error %d.\n", GetLastError());
else
{
WaitForSingleObject(&(overlapped.hEvent), 0);
printf("here it is %d",NumberOfBytesRead );
}
CloseHandle(hFile);
但是ReadFile的返回值为0,最后一个错误等于6。
有谁知道为什么吗? 6个错误代码怎么说?
谢谢!。
最佳答案
也许您的问题出在OVERLAPPED结构上,您没有正确初始化它。
请参阅:“在函数调用中使用该结构之前,应始终将该结构的任何未使用成员初始化为零。否则,该函数可能会失败并返回ERROR_INVALID_PARAMETER。”在此处备注:here。您可以使用memset清除所有内容。