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

C 語言文件操作教程(八):文件檢測函數、庫文件分類與本章小結

     編輯:關於C語言

前言

文件操作的最後一環是**狀態檢測**與**錯誤處理**。本文詳細講解三大文件檢測函數 (feof/ferror/clearerr)、C 庫文件分類與完整頭文件清單,並給出本章核心知識點小結。

一、文件檢測三大函數

1. feof:文件結束檢測

int feof(FILE *stream);
  • 返回 1:文件位置指示器已到達 EOF。
  • 返回 0:未到達。
  • 正確用法:while (!feof(fp)) { process(fgetc(fp)); } 或讀取後檢查 if (feof(fp)) break;。
  • 二進制文件中 EOF 值可能為合法數據,**必須用 feof 區分**。

2. ferror:讀寫錯誤檢測

int ferror(FILE *stream);
  • 返回 0:無錯誤。
  • 返回非 0:發生讀寫錯誤 (硬件故障、磁盤滿、權限等)。
  • 配合 perror 輸出錯誤描述:if (ferror(fp)) perror("File error");。

3. clearerr:清除錯誤與 EOF 標誌

void clearerr(FILE *stream);
  • 將文件流的**錯誤標誌**與 **EOF 標誌**同時重置為 0。
  • 用於「檢測到錯誤/EOF 後,嘗試恢復繼續操作」的場景 (如切換磁帶、重試網絡文件)。

二、C 庫文件分類與完整頭文件清單

1. 兩大類別

  • 頭文件 (.h):常量、類型、宏、函數原型、編譯選項。#include 引入。
  • 函數庫 (.lib/.a):函數目標代碼,鏈接階段自動解析。

鐵律:調用庫函數前,**必須**包含其原型所在的頭文件。

2. 標準/擴展頭文件完整對照表 (按功能域分組)

功能域頭文件核心內容
內存管理alloc.hmalloc/free/farcalloc 等 (Borland 專用)
stdlib.hmalloc/free/atoi/qsort/rand 等 (ANSI 標準)
mem.hmemcpy/memset/memcmp 等 (亦在 string.h)
字符/字符串ctype.hisalpha/isdigit/toupper/toascii 等
string.hstrcpy/strcat/strlen/strcmp/strstr 等
stdio.hFILE、printf/scanf/fopen/fclose 等標準 I/O
數學/浮點math.hsin/cos/sqrt/pow/HUGE_VAL/matherr 結構
float.h浮點參數 (DBL_MAX, FLT_EPSILON 等)
values.h機器相關常量 (MAXINT, MAXDOUBLE 等)
系統/底層dos.hDOS/8086 中斷、REGS、SREGS、int86 等
bios.hIBM PC ROM BIOS 子程序調用
io.h低級 I/O (open/read/write/lseek/close)
目錄/路徑/文件屬性dir.h目錄結構、路徑操作、findfirst/findnext
fcntl.hopen 符號常量 (O_RDONLY 等)
sys\stat.h文件狀態結構、創建/打開屬性常量
進程/信號/異常process.hspawn/exec 族、進程管理
signal.hSIG_DFL/SIG_IGN、signal/raise
setjmp.hlongjmp/setjmp、jmp_buf
時間/日期time.htime/ctime/localtime/gmtime/asctime/difftime
sys\time.htime_t 類型定義
sys\types.hftime/timeb 結構
其他assert.hassert 斷言宏 (調試用)
errno.h錯誤碼助記符 (EDOM, ERANGE 等)
stdarg.hva_list/va_start/va_arg/va_end (可變參數)
stddef.hsize_t/ptrdiff_t/NULL/wchar_t 等通用類型
share.h文件共享鎖參數
graphics.h圖形庫函數、顏色常量、特殊結構
conio.h控制台 I/O (getch/clrscr/gotoxy/kbhit 等)
limits.h環境參數、編譯限制、數值範圍

三、本章核心知識點小結

  1. C 系統將文件視為**字節流** 進行處理。
  2. 按編碼分為**二進制文件**與 **ASCII 文本文件**。
  3. 用 **文件指針 (FILE*)** 標識文件,打開時獲取。
  4. **讀寫前必須打開,結束必須關閉** (fopen/fclose)。
  5. 四種操作模式:**只讀、只寫、讀寫、追加**;同時指定 **二進制/文本** 類型。
  6. 讀寫單位:**字節 (fgetc/fputc)、字符串 (fgets/fputs)、數據塊 (fread/fwrite)、格式化 (fscanf/fprintf)**。
  7. 內部**位置指針**指示當前讀寫位置,移動它 (fseek/rewind) 實現**隨機讀寫**。
  8. 檢測狀態:**feof 判斷結束、ferror 判斷錯誤、clearerr 清除標誌**。

四、文件操作最佳實踐清單

  • **總是檢查 fopen 返回值**,失敗即處理/退出。
  • **二進制模式 (b)** 進行隨機訪問、結構體讀寫、非文本數據。
  • **文本模式** 處理跨平台文本 (換行符自動轉換)。
  • 讀寫循環**檢查返回值** (fread 項目數、fgets 非 NULL)。
  • 用 ferror + perror 獲取系統級錯誤信息。
  • 關閉文件前 **fflush 刷新輸出緩衝區** (僅輸出/更新流)。
  • 大文件 (>2GB) 使用 fseeko/ftello (POSIX) 或 _fseeki64/_ftelli64 (Windows)。

總結

文件操作是程序與持久化存儲的橋樑。掌握 **流模型、模式選擇、四種讀寫單位、隨機定位、狀態檢測、錯誤處理** 六大支柱,配合標準庫 30+ 頭文件的功能域分類,即可應對從配置文件解析到嵌入式數據記錄的各類文件交互場景。

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