Результат WriteFile

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Ответить
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Возвращаемые значения

Если функция завершается успешно, величина возвращаемого значения - не ноль.

Если функция завершается с ошибкой, величина возвращаемого значения - ноль. Чтобы получить дополнительные сведения об ошибке, вызовите GetLastError.
Значит ли это, что можно заменить

Код: Выделить всё

WriteFile(File, (void*)FormatMarker, sizeof(FormatMarker), &Writen, nullptr);
 if (Writen!=sizeof(FormatMarker))
 {
  CloseHandle(File);
  return false;
 }
на

Код: Выделить всё

if (WriteFile(File, (void*)FormatMarker, sizeof(FormatMarker), nullptr, nullptr)==0)
 if (Writen!=sizeof(FormatMarker))
 {
  CloseHandle(File);
  return false;
 }
? Что здесь вообще понимается под ошибкой?
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

При таком раскладе было бы логично вот так:

Код: Выделить всё

if (WriteFile(File, (void*)FormatMarker, sizeof(FormatMarker), nullptr, nullptr)==0)
 {
  CloseHandle(File);
  return false;
 }
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

А ну да, именно это я и имел ввиду. Недозаменил. Вопрос в том, адекватна ли такая замена? Понимается ли под ошибкой просто факт отличия количества фактически записанных байтов от значения третьего параметра функции?
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Под ошибкой имеется в виду любая непредвиденная ситуация (от закончившегося места до аппаратного сбоя), которая не позволила произвести запись в файл. Так что замена вполне адекватна.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить