首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言基礎

C語言文件操作入門(一):文件概念、分類與文件指針

     編輯:C 語言基礎

文件基本概念

文件是有序相關數據集合,擁有文件名,駐留於外部介質(磁盤、SSD 等),使用時調入內存。C 語言統一將輸入輸出視為字符流處理,屏蔽設備差異。

文件分類

維度分類說明
用戶視角普通文件磁盤上有序數據:源碼、目標文件、可執行文件、數據文件
設備文件外部設備抽象為文件:顯示器(標準輸出)、鍵盤(標準輸入)、打印機
編碼方式文本文件 (ASCII)字符對應 ASCII 碼,每字符 1 字節。可讀,如源碼。5678 佔 4 字節
二進制文件按內存位模式存儲。5678 (int) 佔 2/4 字節。不可直接讀,但讀寫快(無轉換開銷)

標準流

  • stdin (標準輸入) :默認鍵盤,scanf/getchar 讀取。
  • stdout (標準輸出) :默認顯示器,printf/putchar 寫入。
  • stderr (標準錯誤) :默認顯示器,錯誤信息輸出,可單獨重定向。

這三個流由系統自動打開,程序啟動即可直接使用。

文件指針 FILE *

C 語言用 FILE* 指向文件結構體(內含文件名、狀態、當前位置、緩衝區等),由庫函數管理,程序員無需關心內部細節。

FILE *fp;  // 聲明文件指針

習慣稱 fp 為「指向文件的指針」,實則指向文件控制結構體。

文件打開 fopen


FILE *fopen(const char *filename, const char *mode);
  • 返回:成功返回文件指針,失敗返回 NULL。
  • mode 決定訪問方式與文件類型。

12 種打開模式

模式含義文件類型操作文件不存在
"rt"只讀文本文本讀報錯
"wt"只寫文本文本寫創建/截斷
"at"追加文本文本尾部寫創建
"rb"只讀二進制二進制讀報錯
"wb"只寫二進制二進制寫創建/截斷
"ab"追加二進制二進制尾部寫創建
"rt+"讀寫文本文本讀/寫報錯
"wt+"讀寫文本文本讀/寫創建/截斷
"at+"讀寫追加文本文本讀/尾部寫創建
"rb+"讀寫二進制二進制讀/寫報錯
"wb+"讀寫二進制二進制讀/寫創建/截斷
"ab+"讀寫追加二進制二進制讀/尾部寫創建

模式字符拆解

  • r = read(讀)
  • w = write(寫,截斷/創建)
  • a = append(追加,必須存在否則創建)
  • t = text(文本,可省略)
  • b = binary(二進制)
  • + = 讀寫雙向

關鍵行為差異

  1. r 系列:文件必須存在,否則失敗。
  2. w 系列:文件不存在則創建;存在則截斷為零長度(數據清空)!
  3. a 系列:文件不存在則創建;存在則定位到末尾,寫入不覆蓋原數據。
  4. 二進制 vs 文本:文本模式涉及換行符轉換(Windows \r\n <-> \n),有 CPU 開銷;二進制模式原樣讀寫,無轉換,跨平台數據交換必用二進制。

標準錯誤處理模式


FILE *fp = fopen("data.bin", "rb");
if (!fp) {
    perror("fopen data.bin");
    return EXIT_FAILURE;
}
// 使用 fp ...
fclose(fp);

文件關閉 fclose


int fclose(FILE *fp);
  • 刷新緩衝區、釋放系統資源、斷開指針關聯。
  • 返回 0 成功,非 0 失敗(如磁盤滿、設備錯誤)。
  • 程序正常退出會自動關閉所有文件,但良好習慣是顯式關閉。

總結

  • 文件抽象為字符流,FILE* 是操作句柄。
  • 12 種模式組合,核心選擇:讀/寫/追加 × 文本/二進制 × 單向/雙向。
  • w 會清空文件,a 保留並追加,r 要求存在。
  • 二進制模式無轉換開銷,適合結構體、數組、圖像等原始數據。
  • 永遠檢查 fopen 返回值,用 perror 診斷。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved