Результат WriteFile

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

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

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

21 окт 2015, 10:09

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

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

Если функция завершается с ошибкой, величина возвращаемого значения - ноль. Чтобы получить дополнительные сведения об ошибке, вызовите 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
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

21 окт 2015, 10:15

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

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

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
Аватара пользователя
Сионист
Сообщения: 1077
Зарегистрирован: 31 мар 2014, 06:18

21 окт 2015, 10:46

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

21 окт 2015, 10:52

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