Сионист » 21 окт 2015, 11:16
Код: Выделить всё
Функция ReadFile возвращает значение тогда, когда выполнено одно из ниже перечисленных условий:
- операция записи завершается на записывающем конце канала,
- затребованное число байтов прочитано,
- или происходит ошибка.
Если функция завершается успешно, величина возвращаемого значения - не ноль.
Если функция завершается с ошибкой, величина возвращаемого значения - ноль. Чтобы получить дополнительные сведения об ошибке, вызовите GetLastError.
Если величина возвращаемого значения - не ноль, а число прочитанных байтов равняется нулю, указатель файла был за пределами текущего конца файла на момент операции чтения. Однако, если файл был открыт с флажком FILE_FLAG_OVERLAPPED, и lpOverlapped имеет значение не ПУСТО (NULL), величина возвращаемого значения - ноль, а GetLastError возвращает ошибку ERROR_HANDLE_EOF, когда указатель файла проходит вне текущего конца файла.
Значит ли это, что можно заменить
Код: Выделить всё
ReadFile(File, Data, sizeof(Data), &Readed, nullptr);
if (Readed!=sizeof(Data))
{
...
}
на
Код: Выделить всё
if (ReadFile(File, Data, sizeof(Data), nullptr, nullptr)==0)
{
...
}
? Понимается ли под ошибкой сам факт несовпадения количества фактически прочитанных байтов от значения третьего параметра не зависимо от причины? При чём здесь какой то записывающий конец и что подразумевается под ним?
[code]
Функция ReadFile возвращает значение тогда, когда выполнено одно из ниже перечисленных условий:
- операция записи завершается на записывающем конце канала,
- затребованное число байтов прочитано,
- или происходит ошибка.
Если функция завершается успешно, величина возвращаемого значения - не ноль.
Если функция завершается с ошибкой, величина возвращаемого значения - ноль. Чтобы получить дополнительные сведения об ошибке, вызовите GetLastError.
Если величина возвращаемого значения - не ноль, а число прочитанных байтов равняется нулю, указатель файла был за пределами текущего конца файла на момент операции чтения. Однако, если файл был открыт с флажком FILE_FLAG_OVERLAPPED, и lpOverlapped имеет значение не ПУСТО (NULL), величина возвращаемого значения - ноль, а GetLastError возвращает ошибку ERROR_HANDLE_EOF, когда указатель файла проходит вне текущего конца файла.
[/code] Значит ли это, что можно заменить [code]ReadFile(File, Data, sizeof(Data), &Readed, nullptr);
if (Readed!=sizeof(Data))
{
...
}[/code] на [code]if (ReadFile(File, Data, sizeof(Data), nullptr, nullptr)==0)
{
...
}[/code]? Понимается ли под ошибкой сам факт несовпадения количества фактически прочитанных байтов от значения третьего параметра не зависимо от причины? При чём здесь какой то записывающий конец и что подразумевается под ним?