當我使用的fread(C語言)從文件中讀取,的fread的返回值有時會是0做fread和fwrite有失敗?如何處理這個?
作爲手動建議:
的fread()和fwrite()返回的數項目成功閱讀或 書面
我必須寫這樣的代碼嗎?
int bytes_read;
while((bytes_read = fread(buffer, sizeof(int), 1, fp)) == 0) {
}
我們是否一定要檢查fread或fwrite是否成功?
當我使用的fread(C語言)從文件中讀取,的fread的返回值有時會是0做fread和fwrite有失敗?如何處理這個?
作爲手動建議:
的fread()和fwrite()返回的數項目成功閱讀或 書面
我必須寫這樣的代碼嗎?
int bytes_read;
while((bytes_read = fread(buffer, sizeof(int), 1, fp)) == 0) {
}
我們是否一定要檢查fread或fwrite是否成功?
不,如果fread
或fwrite
返回的讀取或寫入的記錄數少於預期的數量,那麼執行此類重試循環沒有意義。也就是說,stdio不像可導致「短」讀取或寫入的低級別read
和write
操作。
如果fread
返回的記錄數少於所請求的數量,則表明您已經發生EOF或嚴重的讀取錯誤。您可以通過檢查feof()
和ferror()
來區分它們。
同樣,如果fwrite
返回的請求數少於記錄數,則表示磁盤空間不足或發生嚴重的寫入錯誤。
在任何情況下,由於緩衝stdio使得基本上不可能知道成功寫入了多少,因此如果遇到寫入錯誤,通常需要考慮文件丟失並中止整個操作。
是的。
返回值應始終爲計數。
如果不是 - 您應該使用ferror()
或feof()
來確定您是否已達到文件末尾和/或遇到錯誤。
忽略錯誤和/或意外情況是不可靠的軟件在不知情的用戶身上發生的事情。
http://www.cplusplus.com/reference/clibrary/cstdio/fread/
< - 垃圾
http://pubs.opengroup.org/onlinepubs/000095399/functions/fread.html
http://pubs.opengroup.org/onlinepubs/000095399/functions/fread.html
成功完成後,FREAD()應僅當遇到讀取錯誤或文件結束時,才返回小於nitems的成功讀取元素的數量。如果size或nitems是0,fread()應該返回0,並且數組的內容和流的狀態保持不變。否則,如果發生讀取錯誤,則應設置流的錯誤指示符,並且應設置errno來指示錯誤。
http://pubs.opengroup.org/onlinepubs/007904875/functions/fwrite.html
和fwrite()函數將返回成功寫入元件的數量,其可以是比NITEMS更少如果遇到寫入錯誤。如果size或nitems爲0,fwrite()應該返回0,並且流的狀態保持不變。否則,如果發生寫入錯誤,應設置流的錯誤指示符,並設置errno以指示錯誤。必須使用ferror()或feof()函數來區分錯誤條件和文件結束條件。
如果fread失敗,它通常會保持失敗。通常是因爲它碰到文件的結尾,但可能出於其他原因。如果失敗,你通常不會再試一次。
否,當整個操作成功時,返回值是'count',而不是'size * count'。 – 2012-02-22 05:56:16
@R .. - 呃......我不認爲這是正確的。你確定?你有不同意我發佈的文檔? – Steve 2012-02-22 05:57:22
@R .. - 我敢肯定,如果你要求「5」大小的「10」項目的迴應應該是「50」而不是「5」。 – Steve 2012-02-22 05:58:17