C fwrite 错误处理

标签 c file

当处理来自 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/

相关文章:

windows - 在 Powershell 中删除 file1 中存在于 file2 中的行

bash - 将所有 .jpeg 从目录结构移动到 Mac OS X 上的一个文件夹中

java - Android Studio : Can't write to external storage?

java - 如何比较两个文件并删除不存在的行?

c - 在数组中搜索字符串并返回索引

c - “continue"在此代码中如何工作?

c++ - 阵列平均

c - 如何在函数中使用链接列表

c - 使用多线程时低于预期的加速

Python - 文件中的元组列表