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

C語言文件讀寫:fopen/fclose/fscanf/fprintf 完全指南

     編輯:關於C語言

C語言文件讀寫:fopen/fclose/fscanf/fprintf 完全指南

C 標準庫提供流式文件 I/O 接口,核心是 FILE* 抽象。本文覆蓋打開模式、讀寫函數、錯誤處理、資源管理等實戰要點。

核心 API

FILE *fopen(const char *path, const char *mode);
int fclose(FILE *stream);
int fscanf(FILE *stream, const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);

常用打開模式

模式含義文件存在文件不存在定位
r只讀打開失敗返回 NULL開頭
w只寫截斷為 0創建開頭
a追加寫打開創建末尾
r+讀寫打開失敗開頭
w+讀寫截斷創建開頭
a+讀寫追加打開創建末尾

二進制模式在字母後加 b(如 rb, wb),Windows 下影響換行符轉換,Linux 無差異。

完整範例:複製文件內容並加前綴

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    char line[80];
    FILE *in = fopen("input.csv", "r");
    FILE *out = fopen("output.csv", "a");  // 追加模式
    if (!in || !out) {
        perror("fopen failed");
        return 1;
    }
    while (fscanf(in, "%79[^\n]\n", line) == 1) {
        fprintf(out, "from input:%s\n", line);
    }
    fclose(in);
    fclose(out);
    return 0;
}

關鍵最佳實踐

  1. 檢查返回值:fopen 失敗返回 NULL,必須判斷並用 perror 輸出錯誤原因。
  2. 及時關閉:fclose 刷新緩衝區、釋放文件描述符。進程最多打開有限文件(如 256/1024),長期運行必須關閉。
  3. 緩衝區特性:stdout 通常行緩衝,文件流塊緩衝。fflush(fp) 強制刷新。
  4. 格式化讀寫:fscanf 返回成功匹配項數,EOF 返回 EOF。%79[^\n] 讀取一行(不含換行),防止緩衝區溢出。
  5. 二進制讀寫:fread/fwrite 處理結構體、圖片等非文本數據,避免文本模式下換行符轉換破壞數據。

常見陷阱

  • fgets 保留換行符,fscanf 配合 %[^\n] 不保留,需手動處理。
  • 追加模式 a 多進程寫入安全(POSIX 保證原子追加),但需注意換行符一致性。
  • Windows fopen 路徑分隔符可用 \\ 或 /,建議統一用 / 跨平台。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved