相关:fclose return value check如果我只读文件,是否需要检查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()'失败,那么在阅读过程中可能会出现问题 - 可能是因为文件流结构遭到了践踏。在这种情况下,您可能没有阅读所有您应该获得的数据,并根据部分数据生成答案可能是一个问题。有很多人写代码来做这个检查吗?没有;很多人不检查密切的成功。但是,这可能是因为正在处理的数据并不重要。 – 2011-06-10 05:32:34
@Jonathan,如果fread没有返回错误,为什么你会认为只是因为一个不同的系统调用失败而出现错误?我无法想象为什么一个打开的文件无法关闭,但是如果发生这种情况 - 我认为你不能假设之前没有返回失败的调用实际上失败了。对我来说没有多大意义。 – littleadv 2011-06-10 06:01:27
@littleadv:你使用'feof(fp)'vs'ferror(fp)'检查了读取失败还是到达了EOF?我通常不这样做;我不认为我也是少数。你是对的;如果所有先前的读取都成功了,并且您确认了EOF并且在最终读取时没有错误,那么'fclose()'很可能会失败。它可能发生,但不可能。我提到了'fclose()'失败的最可能原因,即内存以某种形式或形式践踏,或者文件指针管理不当(不关闭实际打开的文件)。绝对不可能。 – 2011-06-10 06:15:12