1. 程式人生 > >使用fopen時應注意的問題

使用fopen時應注意的問題

以前在windows下總喜歡使用CFile類來操作檔案,最近改用fopen系列函式,卻沒想到一個不經意的問題讓我除錯了一整天。開啟檔案使用的程式碼如下:

FILE* fh = fopen("c:/filename", "r");

預設情況下(當然可以進行設定),檔案是以文字模式開啟的,因為我們沒有使用b標記。這個時候,如果檔案資料中含有0x1a就有麻煩了。每當讀到0x1a的時候,檔案的位置會跳到4096(ftell返回的結果),如果檔案小於4096位元組的話,那麼呼叫fgetc得到的結果是EOF。另外,ftell返回的結果也和檔案的物理位置不一致,這使得我們在不自行跟蹤讀取進度的情況下,無法確定讀到什麼位置(呼叫ftell)以及還有多少位元組可讀(檔案長度-ftell(fh))。所以,呼叫fopen的時候還是加上b標記為好(二進位制模式)。文字模式的操作估計多用於stdin和stdout這兩個特殊的檔案控制代碼,因為這個時候0x1a相當於按鍵CTRL+Z。