Обработка ошибок Cfrite - PullRequest
       1

Обработка ошибок Cfrite

1 голос
/ 19 сентября 2011

При правильном подходе к ошибкам подсчета от fwrite (и, следовательно, к ошибкам), к ошибкам?

clearerr(File); //Clear the error
fflush(File); //Empty the buffer of it's contents

Или:

fflush(File); //Other way around, empty buffer first then reset
clearerr(File);

Или просто:

clearerr(File); //Contains fflush implicitly?

Или что-то еще?

1 Ответ

4 голосов
/ 19 сентября 2011

На самом деле вы ничего не можете сделать, если столкнетесь с ошибкой записи.Вы можете очистить буфер, но ваша последняя запись все еще была прервана, поэтому файл не содержит того, что вы хотите.Вы можете закрыть файл, снова открыть его для записи (с помощью «усечения») и записать его заново, но это работает только в том случае, если у вас все еще есть содержимое файла в памяти.

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

Короче говоря, вы неt «обработать» ошибку на файловом сайте;скорее ваша программа должна обработать более крупное состояние ошибки, при котором запись просто не удалась, и отреагировать в соответствующей точке.

Вы, вероятно, должны рассмотреть «атомарные записи», что означает, что вы сначала записываете свой файл во временную и толькоесли вам это удастся, вы удалите оригинал и переименуйте временный в оригинальное имя файла.Таким образом, сам файл всегда находится в согласованном состоянии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...