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

C語言文件操作完整指南:從基礎到實戰

     編輯:關於C語言

C語言文件操作完整指南:從基礎到實戰

在C語言程式設計中,文件操作是持久化數據、實現數據交換的核心技能。本文將系統梳理文件類型、文件指針、核心操作步驟及常用模式,並輔以代碼示例幫助你快速掌握。

一、數據文件的兩大類型

根據存儲形式,文件分為二進制文件與文本文件:

  • 二進制文件(映像文件):數據在內存中以二進制形式存取,無經過編碼轉換,讀寫效率高,適合存儲結構體、圖片等非文本數據。
  • 文本文件(ASCII文件):以ASCII碼形式存取,內容可直接用文本編輯器查看,適合存儲字符串、配置信息等。

簡單判斷:在Mac下將文件拖入記事本,若顯示亂碼則為二進制文件;否則為文本文件。

二、文件類型指針(FILE*)

文件指針實質是指向文件信息結構體的地址,包含文件名、狀態、當前讀寫位置等元數據。定義方式:

FILE *fp;

所有文件操作函數均以f開頭(如fopen、fclose、fputc等)。

三、文件操作三部曲

  1. 打開文件:fopen()
    fp = fopen("文件路徑", "操作模式");
    例如:fp = fopen("/user/wangdi/desktop/haha.txt", "w");
    提示:Mac終端拖入文件可快速獲取絕對路徑。
  2. 讀寫文件:按字節或格式化讀寫
    寫入單字節:fputc(字符ASCII碼, fp); 例:fputc(97, fp); 寫入字符'a'
    讀取單字節:ch = fgetc(fp); 返回字符ASCII碼,遇文件結束返回EOF(通常為-1)
    循環讀取範例:
    while ((ch = fgetc(fp)) != EOF) {
        putchar(ch);
    }
    注意:中文字符佔多字節,單字節讀取會產生亂碼,實際開發常用fgets/fread處理多字節數據。
  3. 關閉文件:fclose(fp);
    原則:每次fopen必須配對fclose,釋放文件緩衝區,確保數據寫入磁盤。

四、常用文件打開模式

模式含義行為
r唯讀文件必須存在,否則返回NULL
w唯寫文件存在則清空(長度歸零),不存在則創建
a追加文件存在則指針移至末尾,不存在則創建
r+/w+/a+讀寫在基礎模式上增加讀寫權限

二進制模式在模式字符串後加b(如"rb"、"wb"),Windows下文本/二進制模式換行符處理不同,跨平台建議顯式指定。

五、完整實戰範例:寫入並讀回字符串

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

int main() {
    FILE *fp = fopen("demo.txt", "w+");
    if (!fp) { perror("打開失敗"); return 1; }

    char *str = "Hello, C File IO!";
    for (int i = 0; i < strlen(str); i++) {
        fputc(str[i], fp);
    }

    rewind(fp); // 將文件指針重置到開頭
    int ch;
    while ((ch = fgetc(fp)) != EOF) {
        putchar(ch);
    }
    putchar('\n');

    fclose(fp);
    return 0;
}

六、避坑指南

  • 打開文件後必須檢查返回值是否為NULL。
  • 讀寫模式(r+、w+、a+)切換讀寫方向時需插入fflush、fseek、rewind或fsetpos。
  • 二進制讀寫結構體時,注意結構體內存對齊導致的跨平台兼容性問題。
  • 大文件操作優先使用fread/fwrite按塊處理,避免頻繁系統調用。

掌握文件操作核心API與模式選擇,是C語言工程化開發的基本功。建議結合man fopen、man fread等手冊深入理解各函數邊界行為。

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