C fputc 错误处理?

标签 c file error-handling

大多数 fputc 的 C 文件编写示例使用非常基本的示例,很少或没有过程错误检查。

我应该将哪些错误检查技术和函数与 fputc 循环结合使用以确保 fputc 已成功写入文件?我应该如何使用它们?

我特别要求 fputc 的原因是我正在使用双向链表。

最佳答案

检查 fputc 的返回值通常不会告诉您任何有用的信息,而且会使您的代码变得丑陋。返回值 rarely meaningful 的原因是因为 stdio 文件被buffered 和写入错误(通常是由于磁盘空间耗尽,但也可能是由于硬件故障,实在没办法处理优雅地)在缓冲区被刷新之前不会被报告。因此,即使报告错误,也无法知道有多少已成功提交到磁盘。

因此,我的观点是,如果在写入过程中出现任何错误,您愿意将整个“保存”操作视为失败,那么您应该只使用 stdio 来写入文件。如果采用这种方式,则可以完全忽略所有写函数的返回值。这是因为 stdio FILE 保留了一个内部错误指示符,可以作为 ferror(f) 访问。因此,只需执行所有写入操作而不检查任何错误,然后在关闭文件之前检查 ferror(f)。如果它返回一个非零值,您就知道您的“保存”操作失败了,您可以将此报告给用户并删除部分写入的文件。请记住,您应该首先写入一个临时文件,然后将其重命名 写入到位,而不是直接在旧文件之上写入,除非您想要冒着在失败时破坏用户旧数据的风险。

关于C fputc 错误处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7462428/

相关文章:

c - 使用 ZwQuerySystemInformation 获取 SystemKernelDebuggerInformation

list - python : Write two lists into two column text file

javascript - JS promise : error handling concept

c++ - 它是干净的代码吗?

c - 如果一个指针的地址是 64 位,为什么它在打印时显示为 6 个字节?

c - 从文本文件中读取 double (使用 C/Visual Studio)

c - 关于整数格式转换

file - Rust:如何逐 block 读取文件

c++ - 如何检查文件是否复制成功? (可移植解决方案)C++

c# - Executenonquery InvalidOperationException