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

C語言文件打開與關閉:fopen 與 fclose 完整指南

     編輯:C 語言基礎

文件操作核心流程

C 語言文件操作標準三步驟:打開 → 讀寫 → 關閉。打開建立文件關聯,關閉釋放資源並刷新緩衝區,兩者缺一不可。

fopen - 打開文件

FILE *fopen(const char *filename, const char *mode);
  • filename:文件名含路徑(Windows 用雙反斜杠 \\ 或正斜杠 /)
  • mode:打開模式字符串
  • 成功返回 FILE*(文件指針),失敗返回 NULL
FILE 結構體:stdio.h 中定義,包含文件名、狀態、位置指針、緩衝區等信息。用戶不直接操作結構體,只通過指針傳遞。

打開模式完整對照表

模式說明文件必須存在清空內容可讀可寫二進制
r只讀是否✓✗✗
r+讀寫是否✓✓✗
w只寫否是✗✓✗
w+讀寫否是✓✓✗
a追加寫否否✗✓✗
a+追加讀寫否否✓✓✗
rb / rb+ / wb / wb+ / ab / ab+對應二進制版本----✓
rt+ / wt+ / at+顯式文本讀寫----✗

模式字符組合規則

模式由 r/w/a(基礎操作)+ b/t(文件類型,默認 t)+ +(讀寫雙向)組成:

  • r (read):讀,文件必須存在
  • w (write):寫,不存在創建,存在清空
  • a (append):追加,不存在創建,存在保留內容
  • b (binary):二進制文件,無轉換
  • t (text):文本文件,換行符轉換(可省略)
  • +:讀寫雙向

標準錯誤處理模式

FILE *fp = fopen("D:\\demo.txt", "rb");
if (fp == NULL) {
    printf("Error: Cannot open file D:\\demo.txt\n");
    // perror("fopen");  // 系統錯誤信息
    return 1;
}
// ... 文件操作 ...
fclose(fp);

fclose - 關閉文件

int fclose(FILE *fp);
  • 刷新緩衝區(寫模式下確保數據落盤)
  • 釋放 FILE 結構體、文件描述符等系統資源
  • 成功返回 0,失敗返回 EOF
  • 程序正常結束時系統會自動關閉所有文件,但最好顯式調用

標準流(無需打開直接使用)

可用 freopen 重定向標準流,實現輸出重定向到文件。

文本 vs 二進制模式關鍵差異

流對應設備常用函數
stdin鍵盤(標準輸入)scanf, getchar, fgets
stdout顯示器(標準輸出)printf, putchar, puts
stderr顯示器(標準錯誤)perror, fprintf(stderr,...)
特性文本模式二進制模式
換行符Windows: \r\n ↔ \n 轉換保持原樣
EOF 處理可能將 Ctrl+Z 視為 EOF無特殊處理
性能稍慢(轉換開銷)快(直接拷貝)
適用場景文本文件、配置、日誌圖片、音視頻、結構體、跨平台數據

最佳實踐清單

  1. 打開後立即檢查 NULL
  2. 二進制數據必須用 "b" 模式
  3. 用完必須 fclose
  4. 路徑用 \\ 或 /,避免轉義陷阱
  5. 關鍵數據寫入後可調用 fflush(fp) 強制刷新
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved