当处理来自 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?
还是别的?
最佳答案
如果遇到写入错误,您实际上无能为力。您可以刷新缓冲区,但最后一次写入仍然中断,因此该文件不包含您想要的内容。您可以关闭文件,重新打开它以进行写入(使用“截断”)并重新写入,但这只有在内存中仍有整个文件内容的情况下才有效。
或者,您可以重新打开并查看已写入了多少数据,但如果存在无法写入文件的外部原因,这对您没有帮助,因此确实没有优雅的恢复方式。
所以简而言之,您不“处理”文件站点的错误;相反,您的程序必须处理更大的错误情况,即写入刚刚失败并在适当的时候使用react。
您可能应该考虑“原子写入”,这意味着您首先将文件写入临时文件,只有在成功后才删除原始文件并将临时文件重命名为原始文件名。这样文件本身就始终处于一致状态。
关于C fwrite 错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7464605/