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

C 語言檔案操作完整指南:開關、讀寫、定位、檢測與模式詳解

     編輯:關於C語言

C 語言檔案操作完整指南:開關、讀寫、定位、檢測與模式詳解

C 標準庫 <stdio.h> 提供檔案操作 API,核心類型 FILE* 封裝檔案描述符、緩衝區、位置指標。本文系統整理開關、讀寫、定位、錯誤檢測與 12 種開檔模式。

1. 檔案指標與開關

FILE *fp = fopen("c:\\\\myfile", "r");  // 路徑雙反斜線轉義
if (!fp) { perror("fopen"); return -1; }
fclose(fp);  // 成功返回 0,失敗返回 EOF(-1)

2. 12 種開檔模式

模式說明建立新檔截斷既有讀/寫位置
r文字讀取否否開頭
w文字寫入是是開頭
a文字附加是否結尾
r+文字讀寫否否開頭
w+文字讀寫是是開頭
a+文字讀寫附加是否結尾(寫)/開頭(讀)
rb/wb/ab/rb+/wb+/ab+二進位對應模式同上同上同上

警告:"w" 會清空既有檔案內容,謹慎使用。

3. 讀寫函數族

層級函數用途
字符fgetc/fputc單字符讀寫,返回 int (含 EOF)
字串fgets/fputs行讀寫,fgets 保留換行,fputs 不自動換行
格式化fscanf/fprintf類 scanf/printf,轉換格式字串
二進位塊fread/fwrite結構體/陣列批量讀寫,fwrite(ptr, size, count, fp)

4. 檔案定位

rewind(fp);                    // 回到開頭
fseek(fp, offset, origin);     // origin: SEEK_SET(0)/SEEK_CUR(1)/SEEK_END(2)
long pos = ftell(fp);          // 當前位置偏移量,錯誤返回 -1L

5. 錯誤與狀態檢測

feof(fp);      // 是否讀到檔案結尾 (非預測,而是上次讀取已達 EOF)
ferror(fp);    // 是否發生錯誤
clearerr(fp);  // 清除 EOF 與錯誤旗標

6. 完整範例:二進位結構體寫入與讀回

struct Student { int id; char name[20]; float score; };
Student s = {101, "Alice", 92.5};

// 寫入
FILE* fp = fopen("students.dat", "wb");
fwrite(&s, sizeof(Student), 1, fp);
fclose(fp);

// 讀回
fp = fopen("students.dat", "rb");
Student s2;
fread(&s2, sizeof(Student), 1, fp);
printf("%d %s %.1f\n", s2.id, s2.name, s2.score);
fclose(fp);

最佳實踐

  • 永遠檢查 fopen 返回值,失敗時用 perror 或 strerror(errno) 診斷。
  • 二進位模式 (b) 避免 Windows 換行轉換 (\n↔\r\n) 破壞資料。
  • 大量資料用 fread/fwrite 而非逐字符/格式化,效能差異可達 100 倍。
  • 關鍵資料寫入後呼叫 fflush 或 fsync (POSIX) 確保落盤。
  • C++ 專案優先使用 std::fstream,RAII 自動管理生命週期。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved