相关: fclose返回值检查
当你写文件时,检查fclose()
的返回值(以防止刷新操作失败)非常重要,但是在读取文件时是否需要这样做呢?
FILE *f = fopen(path, "r");
if (f == NULL)
return 0;
/* Do something with the file... */
if (fclose(f) != 0) {
/* Error closing a file we successfully read. */
return 0;
}
fclose()
失败,很可能在读取过程中出现了问题——也许是因为某些东西践踏了文件流结构。在这种情况下,您可能没有读取到所有应该读取的数据,并且基于部分数据生成答案可能会有问题。许多人编写代码来进行检查吗?不,很多人不检查关闭是否成功。但是,这可能是因为正在处理的数据并不重要。 - Jonathan Lefflerfeof(fp)
和ferror(fp)
来检查读取是否失败或到达EOF?我通常不这样做;我认为我并不是少数派。你是对的;如果所有先前的读取都成功,并且你确认在最后一次读取时得到了EOF而不是错误,那么fclose()
失败的可能性非常小。它可能发生,但不太可能。我提到了fclose()
失败的最有可能的原因,即以某种形式的内存破坏或文件指针的某些错误管理(没有关闭实际打开的文件)。绝对不太可能。 - Jonathan Leffler