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

C語言文件操作完全指南:標准I/O與非標准I/O

     編輯:C 語言入門

一、標准文件讀寫

1. 打開文件 fopen()

FILE *fopen(char *filename, char *type);

分配 FILE 結構並返回指針。模式詳解:

模式含義
r只讀打開
w只寫,截斷或創建
a追加寫入
rb/wb/ab二進制模式對應
r+/w+/a+讀寫模式
rb+/wb+/ab+二進制讀寫模式

失敗返回 NULL,必須檢查:

FILE *fp; if((fp=fopen("test","w"))==NULL) { printf("File cannot be opened\n"); exit(1); }

2. 關閉文件 fclose()

int fclose(FILE *stream);  // 成功返回 0
int fcloseall();             // 關閉所有打開文件,返回關閉數量

寫入時緩衝區未滿不會落盤,必須 fclose 確保數據完整性。

3. 文件讀寫函數族

  • 字符:fgetc/fputc(函數)、getc/putc/getchar/putchar(宏/函數)。返回 int 以容納 EOF(-1)。
  • 字符串:fgets(讀 n-1 字符或遇 \n 停止,補 \0)、fputs(寫字符串不含 \0)、gets/puts(不安全/自動換行,保留兼容)。
  • 格式化:fprintf/fscanf 對應 printf/scanf,目標為文件流。
  • 二進制塊:fread/fwrite 按 size*count 字節讀寫,返回實際項數,可實現對象序列化。

4. 緩衝區控制

  • fflush(stream) 清除輸出緩衝區,flushall() 清除所有。
  • setbuf(stream, buf) 設置用戶緩衝區(大小 BUFSIZ),buf=NULL 關閉緩衝。
  • setvbuf(stream, buf, type, size):_IOFBF全緩衝、_IOLBF行緩衝、_IONBF無緩衝。

5. 隨機訪問

  • ftell(fp) 返回當前位置偏移量(二進制流精確,文本流因換行翻譯可能不精確)。
  • fseek(fp, offset, origin):SEEK_SET開頭、SEEK_CUR當前、SEEK_END結尾。副作用:清除行末標志、丟棄 ungetc 回退字符、允許讀寫模式切換。
  • rewind(fp) 定位開頭並清除錯誤標志。
  • fgetpos/fsetpos 可移植的位置保存/恢復(fpos_t 類型不透明)。

6. 流狀態檢查

  • feof(fp) 到達文件尾返回真。
  • ferror(fp) 發生讀寫錯誤返回真。
  • clearerr(fp) 重置錯誤標志。

7. 臨時文件

  • tmpfile() 創建 wb+ 模式臨時文件,關閉自動刪除。
  • tmpnam(buf) 生成唯一文件名(TMP_MAX 保證不重複)。

8. 文件刪除與重命名

  • remove(filename)、rename(old, new),成功返回 0。文件打開時行為編譯器相關。

二、非標准文件 I/O(UNIX 風格,io.h)

DOS 3.0+ 支持。文件描述符(整數)而非 FILE*。

  • open(filename, access):access = 基本模式 | 修飾符(O_RDONLY/O_WRONLY/O_RDWR | O_APPEND/O_CREAT/O_TRUNC/O_BINARY/O_TEXT)。成功返回非負描述符,失敗 -1。
  • close(handle) 關閉。
  • read(handle, buf, count)、write(handle, buf, count) 返回實際字節數。
  • lseek(handle, offset, fromwhere)、tell(handle) 對應 fseek/ftell。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved