对ReadFile函数的异步调用返回6个错误代码

Async call to ReadFile function returns 6 error code

本文关键字:返回 6个 错误代码 调用 异步 ReadFile 函数      更新时间:2023-10-16

为了异步读取文件,我编写了下面的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 hfilen");
   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。"。您可以使用memset来清除所有内容。

错误代码6表示无效句柄。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx

这似乎很奇怪,因为您检查了无效的句柄值。不确定这是否对你有帮助,但我可能会先尝试同步打开文件。