前言:
在C语言中,文件操作是数据持久化的核心,也是期末考试、上机实验、课程设计的必考点。本文从基础到实战,把所有文件相关知识点一次性讲透。
一、文件操作基本流程(固定四步)
定义文件指针 FILE *fp;
打开文件 fp = fopen(文件名, 打开模式);
读写数据
关闭文件 fclose(fp);
打开文件必须判断是否成功:
二、文件打开模式(紧凑表格)
表格
三、单个字符读写:fgetc / fputc
fputc(ch, fp):写入一个字符
fgetc(fp):读取一个字符,读到末尾返回 EOF
四、字符串读写:fgets / fputsfputs(str, fp):写入字符串
fgets(buf, size, fp):读取一行,自动加 \0
五、文本格式化读写:fprintf / fscanf
六、二进制读写:fread / fwrite(重点)
直接搬运内存字节,不翻译、不转格式。
典型用法:结构体一次性读写。
七、随机读写:fseek / ftell / rewind
- rewind:回到文件开头
- ftell:获取当前位置
- fseek:跳转到任意位置
SEEK_SET 文件开头
SEEK_CUR 当前位置
SEEK_END 文件末尾
八、文件结束判定(非常重要!)
- 文本文件判断结束
fgetc 读到最后会返回 EOF(-1)
2. 二进制文件判断结束
必须使用 feof(fp) 判断
3. 注意
feof() 必须在读操作之后使用,不能提前判断。
九、文件缓冲区(面试/考试常考)
- 什么是文件缓冲区?
系统会自动为每个打开的文件开辟一段内存空间,叫做文件缓冲区。
- 为什么需要缓冲区?
硬盘读写速度很慢,缓冲区可以减少直接访问硬盘的次数,提高效率。
缓冲区刷新机制(什么时候真正写入文件)
缓冲区满了
调用 fflush(fp)
调用 fclose(fp)
程序正常结束
一句话理解
数据先写到缓冲区,满了/关闭文件才真正落到硬盘。
十、为什么读一个字符会自动跳到下一个?
因为 FILE 内部有一个文件位置指针。
每次读写,系统都会自动后移指针,不需要手动 ++ 。
十一、所有文件函数一句话总结
fputc/fgetc:单个字符
fputs/fgets:字符串/一行
fprintf/fscanf:格式化文本
fread/fwrite:二进制整块数据
rewind:回到开头
ftell:获取当前位置
fseek:随机跳转
feof:判断文件结束
缓冲区:提高读写效率
十二、注意事项
打开文件必须判断 fp == NULL
操作完必须 fclose(fp)
文件指针不能手动 ++
二进制文件记事本打开是乱码
feof() 必须在读之后判断
数据先存缓冲区,再写入硬盘
结语:
文件操作是编程中数据持久化的基础,也是考试、上机、课程设计的高频考点。把这篇内容吃透,以后不管是写管理系统、读写配置文件,还是处理大量数据,都会非常轻松。
如果这篇文章对你有帮助,欢迎 点赞 👍、收藏 📂、关注我 🎯
后续会持续更新 C 语言从入门到精通、数据结构、算法、期末复习、上机真题 等干货内容,跟着我,编程不迷路,一起稳步变强!