ReadFile (), возвращающий 1 с lpNumberOfBytesRead, установленным в 0 - PullRequest
2 голосов
/ 07 февраля 2012

Я использую функцию VC ++

ReadFile(FileHandle,charBuf,noOfBytesToRead,&noOfBytesRead,NULL);

внутри цикла for; в каждой итерации цикла foor FileHandle перемещается вперед в файле, т.е. на каждой итерации мы читаем определенную единицу файла и копируем эту единицу (набор данных в файле) данных в файле в массив char *.

Этот объем данных, которые должны быть прочитаны (из файла в массив char *) на каждой итерации, определяется параметром "noOfBytesToRead".

Для некоторых итераций no: of ReadFile () работает нормально, но я наблюдаю, что для некоторой "n" -й итерации (при чтении nTH-пакета данных) 4-й аргумент ( noOfBytesRead ) в приведенном выше для вызова установлено значение 0, хотя ReadFile () возвращает 1.

Возвращаемое значение ReadFile () равно 1, что указывает на успех, а 4-й параметр "noOfBytesRead" установлен в 0 вместо no: of bytes Read. Это противоречиво! Почему это так?

Может ли кто-нибудь любезно помочь мне в этом. ReadFile (), являющийся Win API, я даже не могу войти в код для дальнейшей отладки.

Ответы [ 2 ]

4 голосов
/ 07 февраля 2012

С MSDN :

Если возвращаемое значение отлично от нуля, а число прочитанных байтов равно нулю, указатель файла находился за текущим концом файла во время операции чтения.

2 голосов
/ 07 февраля 2012

Со страницы MSDN :

Когда синхронная операция чтения достигает конца файла, ReadFile возвращает TRUE и устанавливает * lpNumberOfBytesRead в ноль.

...