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

C 語言檔案 I/O 函式完全筆記:從 fopen 到 fread/fwrite

     編輯:關於C語言

檔案指標與 FILE 結構

C 語言透過 FILE* 指標操作檔案,FILE 實為結構體,封裝緩衝區、位置指標、錯誤旗標等。

FILE *fp = fopen("filename", "mode");
// 或
FILE *fp;
fp = fopen("filename", "mode");

用完必須 fclose(fp) 釋放資源,良好習慣。

常用模式字串

模式說明
r唯讀,檔案必須存在
w寫入,截斷或建新
a附加,建新或寫入尾端
r+讀寫,檔案必須存在
b二進位模式(如 rb wb)

錯誤檢查

if ((fp = fopen("file.txt", "r")) == NULL) {
    perror("Open failed");
    return -1;
}

檔案結尾判斷

  • 文字檔:fgetc() 回傳 EOF (-1)
  • 二進位檔:必須用 feof(fp),因資料可能含 0xFF

字元級 I/O

int ch = fgetc(fp);        // 讀取,含空白、換行
fputc(ch, fp);             // 寫入
// 巢狀用法
fputc(fgetc(in), out);

回傳值:成功回傳字元,失敗回傳 EOF。

區塊級 I/O(二進位首選)

size_t fread(void *buf, size_t size, size_t count, FILE *fp);
size_t fwrite(const void *buf, size_t size, size_t count, FILE *fp);
  • buf:資料緩衝區位址
  • size:單一元素位元組數
  • count:元素個數
  • 回傳:實際讀寫元素數(可能 < count)

注意:buf 空間必須 ≥ size * count。文字檔使用可能因換行轉換導致位元組數不符預期。

整數直讀寫

putw(10, fp);   // 寫入 int(二進位)
int x = getw(fp); // 讀取 int,失敗回傳 -1

純二進位操作,文字編輯器開啟會顯示亂碼。

實用建議

  1. 二進位資料用 fread/fwrite,文字用 fgets/fprintf
  2. 檢查所有 I/O 回傳值
  3. 大檔案考慮 mmap 或分塊處理

作者:shimachao

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved