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

C語言文件操作函數大全:fopen/fread/fwrite/fseek 等核心 API 深度解析

     編輯:關於C

一、文件打開:fopen


FILE *fopen(const char *path, const char *mode);
模式說明
r只讀,文件必須存在
w只寫,截斷或創建
a追加寫,保留原內容
r+讀寫,文件必須存在
w+讀寫,截斷或創建
a+追加讀寫,創建或保留

二進制標誌:加 b(如 rb、wb+),Windows 下區分換行符處理。

錯誤處理範式:


FILE *fp = fopen("data.txt", "r");
if (!fp) { perror("fopen failed"); return -1; }

二、數據塊讀寫:fread / fwrite


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:元素個數
  • 返回值:成功讀寫的元素個數

示例:fread(fa, 4, 5, fp) 讀 5 個 float(每個 4 字節)到數組 fa。

三、字符讀寫:fgetc / fputc


int fgetc(FILE *fp);      // 讀取一字符,返回字符值或 EOF(-1)
int fputc(int ch, FILE *fp); // 寫入一字符,返回寫入字符或 EOF

宏定義關係:#define getc(fp) fgetc(fp)、#define putchar(ch) fputc(ch, stdout)

四、字符串讀寫:fgets / fputs


char *fgets(char *str, int n, FILE *fp);  // 讀 n-1 字符或遇到換行
int fputs(const char *str, FILE *fp);     // 寫字符串(不含 \0)

五、格式化讀寫:fscanf / fprintf


int fprintf(FILE *fp, const char *format, ...);
int fscanf(FILE *fp, const char *format, ...);

類似 printf/scanf 但針對文件流。

六、隨機訪問:ftell / fseek / rewind


long ftell(FILE *fp);                           // 獲取當前偏移量
int fseek(FILE *fp, long offset, int origin);   // 移動指針
int rewind(FILE *fp);                           // 重置到文件頭
origin值基準位置
SEEK_SET0文件開頭
SEEK_CUR1當前位置
SEEK_END2文件末尾

七、獲取文件大小標準寫法


FILE *fp = fopen("test.txt", "r");
fseek(fp, 0, SEEK_END);
long size = ftell(fp);
rewind(fp);  // 回到開頭繼續處理

八、關閉文件:fclose


int fclose(FILE *fp);  // 刷新緩衝區、釋放資源、關閉文件描述符

進程正常退出會自動關閉所有流,異常退出不保證刷新。

九、完整示例:結構體二進制存取


typedef struct {
    int id;
    char name[20];
    float score;
} Student;

void save_students(Student *arr, int n, const char *file) {
    FILE *fp = fopen(file, "wb");
    fwrite(arr, sizeof(Student), n, fp);
    fclose(fp);
}

void load_students(Student *arr, int n, const char *file) {
    FILE *fp = fopen(file, "rb");
    fread(arr, sizeof(Student), n, fp);
    fclose(fp);
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved