2011-09-18 60 views
1

當處理來自fwrite(因此錯誤)的計數不匹配時,處理錯誤,什麼是正確的方法?C fwrite錯誤處理

clearerr(File); //Clear the error 
fflush(File); //Empty the buffer of it's contents 

或者:

fflush(File); //Other way around, empty buffer first then reset 
clearerr(File); 

或者只是:

clearerr(File); //Contains fflush implicitly? 

還是別的什麼?

+0

根本調用'clearerr'的目的是什麼? –

+0

清除文件上的錯誤指示符。我錯誤的印象是它也重新捲起了這個文件,但事實並非如此。 – SSight3

+0

如果我沒有弄錯,'rewind'倒帶文件並清除eof和錯誤指示符。但我仍然不確定它會如何幫助你.. –

回答

4

如果遇到寫入錯誤,您無法做任何事情。您可以刷新緩衝區,但最後一次寫入仍然被破壞,所以文件不包含您想要的內容。您可以關閉文件,重新打開文件(使用「截斷」)並重新寫入,但只有在內存中仍然包含整個文件內容的情況下才有效。

或者,您可以重新打開並查看已寫入了多少數據,但如果存在導致無法寫入文件的外部原因,則無法幫助您,所以確實沒有優雅的恢復方式。

簡而言之,你不會「處理」文件站點的錯誤;相反,您的程序必須處理寫入失敗並在適當的點作出反應的較大錯誤條件。

你或許應該考慮的「原子寫」,這意味着你先寫你的文件到臨時的,只有當你繼承你刪除原始和臨時重命名爲原來的文件名。這樣文件本身總是處於一致的狀態。