Асинхронный вызов функции ReadFile возвращает 6 код ошибки - PullRequest
0 голосов
/ 20 февраля 2012

Я написал код на 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?

Спасибо!.

Ответы [ 2 ]

3 голосов
/ 20 февраля 2012

Возможно, ваша проблема в структуре OVERLAPPED, которую вы неправильно инициализируете.Смотрите: «Любые неиспользуемые члены этой структуры всегда должны быть инициализированы нулем, прежде чем структура будет использована в вызове функции. В противном случае функция может завершиться с ошибкой и вернуть ERROR_INVALID_PARAMETER».в комментариях здесь: здесь .Вы можете использовать memset, чтобы очистить все это.

0 голосов
/ 20 февраля 2012

Код ошибки 6 означает недопустимый дескриптор.

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

Что странно, так как вы проверяете неверное значение дескриптора. Не уверен, помогло ли это вам, но я мог бы сначала попытаться открыть файл синхронно.

...