相關: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