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

C語言文件操作完全指南:核心API、讀寫模式與實戰代碼

     編輯:關於C語言

文件操作核心函數速查表

分類函數功能
流控制fopen()打開流,返回 FILE*
fclose()關閉流,刷新緩衝區
字符操作fputc()寫單字符
fgetc()讀單字符,返回 int 以容納 EOF
fputs()寫字符串(不含結束符)
fgets()讀一行或指定長度,保留換行符
格式化操作fprintf()格式化輸出到流
fscanf()格式化從流讀取
隨機訪問fseek()定位到指定偏移量
rewind()重置到文件開頭
ftell()獲取當前位置
狀態檢查feof()到達文件末尾返回非零
ferror()發生錯誤返回非零
二進制塊操作fread()讀指定數量數據塊
fwrite()寫指定數量數據塊
臨時文件tmpfile()創建二進制臨時文件,自動刪除
tmpnam()生成唯一文件名
文件管理remove()刪除文件

實戰代碼範例

字符流寫入文件

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

int main(void) {
    FILE *fp = NULL;
    const char *filename = "D:/1.txt";  // 跨平台建議用正斜杠或雙反斜杠
    char buf[] = "alkdjlkfjdlkjfodijfoidjdijfkldjfk";

    fp = fopen(filename, "a+");  // 追加讀寫,文件不存在則創建
    if (fp == NULL) {
        perror("fopen failed");
        return 1;
    }

    for (size_t i = 0; i < strlen(buf); ++i) {
        if (fputc(buf[i], fp) == EOF) {
            perror("fputc failed");
            break;
        }
    }

    fclose(fp);
    return 0;
}

字符流讀取文件

#include <stdio.h>

int main(void) {
    FILE *fp = fopen("D:/1.txt", "r");
    if (fp == NULL) {
        perror("fopen failed");
        return 1;
    }

    int ch;
    while ((ch = fgetc(fp)) != EOF) {  // 必須用 int 接收以區分 EOF 與有效字符
        putchar(ch);
    }

    if (ferror(fp)) {
        perror("read error");
    }

    fclose(fp);
    return 0;
}

關鍵注意事項

模式字符串詳解

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

二進制模式在後加 b(如 rb、wb),Windows 下影響換行符轉換。

常見錯誤與最佳實踐

  • 檢查 fopen 返回值:永遠不要假設打開成功
  • fgetc 返回 int:用 char 接收會導致 EOF(-1)與有效字符 0xFF 混淆
  • 避免 feof 控制循環:正確寫法是 while ((ch = fgetc(fp)) != EOF)
  • 二進制讀寫結構體:注意對齊、填充字節與跨平台端序問題
  • 及時 fclose:刷新緩衝區、釋放文件句柄、更新文件元數據

跨平台路徑處理

Windows 接受正斜杠 / 作為路徑分隔符,建議統一使用正斜杠或雙反斜杠 \\\\,避免轉義字符陷阱。

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