2011-09-18 87 views
1

当处理来自fwrite(因此错误)的计数不匹配时,处理错误,什么是正确的方法?C 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? 

还是别的什么?

+0

根本调用'clearerr'的目的是什么? –

+0

清除文件上的错误指示符。我错误的印象是它也重新卷起了这个文件,但事实并非如此。 – SSight3

+0

如果我没有弄错,'rewind'倒带文件并清除eof和错误指示符。但我仍然不确定它会如何帮助你.. –

回答

4

如果遇到写入错误,您无法做任何事情。您可以刷新缓冲区,但最后一次写入仍然被破坏,所以文件不包含您想要的内容。您可以关闭文件,重新打开文件(使用“截断”)并重新写入,但只有在内存中仍然包含整个文件内容的情况下才有效。

或者,您可以重新打开并查看已写入了多少数据,但如果存在导致无法写入文件的外部原因,则无法帮助您,所以确实没有优雅的恢复方式。

简而言之,你不会“处理”文件站点的错误;相反,您的程序必须处理写入失败并在适当的点作出反应的较大错误条件。

你或许应该考虑的“原子写”,这意味着你先写你的文件到临时的,只有当你继承你删除原始和临时重命名为原来的文件名。这样文件本身总是处于一致的状态。