第八章 文件操作

該文章內容整理自《C程序設計(第四版)》、《高質量C編程指南》、以及網上各大博客

文件主要包含兩種,程序文件和數據文件。程序文件的內容是程序代碼。數據文件是供程序運行時讀寫的數據。根據數據的組織形式,數據文件可分爲ASCII文件和二進制文件。數據在內存中是以二進制形式存儲則爲二進制文件,此時也可以認爲是存儲在內存的數據的映像,因而也稱之爲映像文件。若以ASCII碼形式存儲,則稱爲ASCII碼文件,又稱文本文件,需要再存儲前進行轉換,每個字節存放一個字符的ASCII碼

對於程序中每個正在使用的文件,系統都會開闢一個在外存和程序數據區之間的文件緩衝區。除此之外,還會在內存開闢一個文件信息區,用以存放文件的有關信息,稱爲文件指針,是類型名爲FILE的結構體。

文件打開和關閉

  1. fopen。調用方式爲fopen(文件名, 使用文件方式);用來打開數據文件。文件使用方式選項如下。當文件不能打開時,則會返回空指針NULL
    file1file2
    程序中可以使用3個標準的流文件:標準輸入流、標準輸出流、標準出錯輸出流。標準輸入流是從終端的輸入,標準輸出流是向終端的輸出,標準出錯輸出流是當程序出錯時將出錯信息發送到終端。在程序開始運行時系統會自動打開這3個文件而不需要再用fopen打開
  2. fclose。調用方式爲fclose(文件指針);用來關閉數據文件。在處理完緩衝區的數據後撤銷文件信息區和文件緩衝區。當成功關閉文件則返回0,否則返回EOF,也即-1

文件順序讀寫

  1. fgetc。調用方式爲fgetc(fp);用來從文件讀入一個字符。讀取成功則返回讀取字符,否則返回EOF
  2. fputc。調用方式爲fputc(c, fp);用來將字符寫到文件中。輸出成功則返回輸出字符,否則返回EOF
  3. fgets。調用方式爲fgets(str, n, fp);用來從文件中讀入n-1個字符長的字符串並存放在字符數組str中。若在讀完n-1個字符之前遇到換行符’\n’或者文件結束符EOF則結束讀入,同時把’\n’也當成一個字符讀入。讀成功則返回地址str,否則返回NULL
  4. fputs。調用方式爲fputs(str, fp);用來把str中的字符串寫到文件中。此時字符串結尾的’\0’不輸入。輸出成功則返回0,否則返回非0值
  5. fscanf。調用方式爲fscanf(文件指針, 格式字符串, 輸出表列);用來從文件中格式地讀入數據。
  6. fprintf。調用方式爲fprintf(文件指針, 格式字符串, 輸入表列);用來格式地將數據寫到文件。
  7. fread。調用方式爲fread(buffer, size, count, fp);用來從文件中讀一個數據塊。
  8. fwrite。調用方式爲fwrite(buffer, size, count, fp);用來向文件寫一個數據塊。其中,buffer是指要讀寫的數據存儲區的地址,size是指要讀寫的每個數據項的字節數,count是指要讀寫多少個數據項。fread和fwrite函數只能處理二進制文件

文件隨機讀寫

文件位置標記用來指示接下來要讀寫的一個字符的位置。只要控制文件位置標記就能實現隨機讀寫

  1. rewind。調用方式爲rewind(fp);用來使文件位置標記指向文件開頭。沒有返回值
  2. fseek。調用方式爲fseek(文件類型指針, 位移量, 起始點);用於移動文件位置標記。一般用於二進制文件。其中,位移量是指以起始點爲基點向前移動的字節數,爲long型數據。起始點用0、1、2表示,具體意義如下
    fseek
  3. ftell。調用方式爲ftell(fp);用來得到流式文件中文件位置標記,用相對於文件開頭的位移量表示,否則返回-1L

文件讀寫出錯檢測

  1. ferror。調用方式爲ferror(fp);每次對同一個文件調用輸入輸出函數時都會產生一個新的ferror值,此時應立即使用ferror函數檢查
  2. clearerr。調用方式爲clearerr(fp);若在調用一個輸入輸出函數時出現錯誤,ferror值爲一個非零值,此時應立即調用clearerr清零