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

C語言文件操作全攻略(一):核心函數與實戰詳解

     編輯:關於C語言

一、文件指針 FILE* 的本質

C 語言通過 FILE 結構體(定義於 stdio.h)維護文件狀態:文件描述符、緩衝區指針、操作模式、當前讀寫位置等。程序不直接操作結構體,而是通過文件指針 FILE* fp 間接訪問。每打開一個文件,系統分配一個 FILE 結構體,fp 指向其首地址。

二、文件打開與關閉

fopen —— 打開文件

FILE* fopen(const char* filename, const char* mode);

常用模式組合(r讀 w寫 a追加 b二進制 +讀寫):

模式含義
r/rt只讀打開文本文件,文件必須存在
w/wt只寫打開文本文件,不存在則創建,存在則清空
a/at追加寫入文本文件,不存在則創建
rb/wb/ab對應二進制文件操作
r+/w+/a+文本文件讀寫
rb+/wb+/ab+二進制文件讀寫

返回值:成功返回文件指針,失敗返回 NULL。必須檢查返回值:

FILE* fp; 
if ((fp = fopen("e:\\test.txt", "rt")) == NULL) { 
    printf("Cannot open file!"); 
    exit(1); 
}

fclose —— 關閉文件

int fclose(FILE* fp);

流程:刷新緩衝區→寫盤→釋放 FILE 結構體→置 fp 為空指針。返回 0 表示成功,非 0 表示錯誤。

三、核心讀寫函數族

1. 字符讀寫:fgetc / fputc(等價於 getc/putc)

  • int fgetc(FILE* fp):讀取一字符,返回字符值;遇 EOF 返回 EOF(-1)。
  • int fputc(int ch, FILE* fp):寫入一字符,成功返回該字符,失敗返回 EOF。

示例:逐字符複製文件內容到標準輸出

int ch = fgetc(fp); 
while (ch != EOF) { 
    putchar(ch); 
    ch = fgetc(fp); 
}

2. 字符串讀寫:fgets / fputs

  • char* fgets(char* buf, int n, FILE* fp):讀取最多 n-1 字符或至換行/EOF,保留 \n,末尾補 \0。
  • int fputs(const char* str, FILE* fp):寫入字符串(不含結束符),成功返回非負,失敗返回 EOF。

3. 數據塊讀寫:fread / fwrite

size_t fread(void* ptr, size_t size, size_t count, FILE* fp); 
size_t fwrite(const void* ptr, size_t size, size_t count, FILE* fp);

按 size 字節為單位讀寫 count 塊,返回實際塊數。適合結構體、數組批量存取。

4. 格式化讀寫:fscanf / fprintf

類似 scanf/printf,多一個 FILE* 參數,支持格式化字符串解析與生成。

四、完整實戰演示

案例 1:鍵盤輸入逐字符寫入文件,再讀回顯示

FILE* fp = fopen("e:\\test.txt", "wt+"); 
char ch = getchar(); 
while (ch != '\n') { fputc(ch, fp); ch = getchar(); } 
rewind(fp); // 指針回文件頭 
ch = fgetc(fp); 
while (ch != EOF) { putchar(ch); ch = fgetc(fp); } 
fclose(fp);

注意:wt+ 會清空原文件內容;若需保留原內容追加,請用 at+。

案例 2:文本文件讀取顯示(配合圖片演示)

輸入文件內容

程序運行輸出

五、常見坑點提醒

  • 路徑轉義:Windows 路徑用雙反斜杠 \\ 或正斜杠 /。
  • 模式匹配:讀操作需 r/r+,寫操作需 w/a/+,否則 fgetc/fputc 失敗。
  • 緩衝區殘留:printf 可能顯示舊數據,文件讀寫演示建議用 write/putchar 直接輸出。
  • 二進制 vs 文本:Windows 下文本模式會轉換 \r\n,二進制模式不轉換,跨平台處理二進制數據必須加 b。

結語

本文系統梳理了 C 文件操作的核心 API、模式選擇、錯誤處理與實戰技巧。下一篇將深入講解 fseek/ftell 隨機訪問、fread/fwrite 結構體序列化等進階主題。本文出自「趙玉強的博客」:原文鏈接

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