文件
从打开到定位:搞懂文件操作的底层逻辑与边界陷阱
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
文件
从打开到定位:搞懂文件操作的底层逻辑与边界陷阱
文件的基本概念
你在 Word 里写了一篇文章,按下「保存」,弹出一个窗口让你选位置、取名字。这一刻,「文件」这个抽象概念就被创造出来了。
书名+索书号定位唯一一本;封面是元数据;纸张内容由读者解读;书架差异被抹平
文件的打开和关闭
前页讲了文件是什么——但文件只是躺在磁盘上的字节序列。要真正读写它,第一步就是「打开」。这一步看似只是按个按钮,本质却是让操作系统在内存里建立一条专属通道。
借书=申请访问并拿到索书号;句柄就是索书号,归还=结束访问释放馆藏
文件的读写函数
文件打开了,光有个通道没用——真正的工作是把数据从里往外读、或从外往里写。C 语言把读写按颗粒度分成了几档,每档各有适用场景和边界。
文件指针像指尖从头移到尾;逐字像 fgetc,逐行像 fgets,整段像 fread
文件的定位操作
读写函数会按顺序推进指针,但有时想直接跳到某处——比如读日志末尾最新一条。这就需要定位操作。
拖动进度条跳到任意时刻 = fseek;显示当前播放时间 = ftell
文件的出错检测
前面学了打开、读写、定位文件——但都假设操作成功。现实中磁盘可能损坏、路径可能写错,读到末尾时返回值还会和出错混淆。出错检测就是给文件操作装上'诊断系统'。
故障灯亮=errno被设置;perror等=查看具体故障图标
二级C考点解析之文件基本
在桌面上双击文本文档、看一眼内容、改几个字、保存关闭——C 语言读写文件流程几乎一样,但中间需要一张「通行证」才能让程序操作磁盘上的数据。
登记领钥匙(FILE*)→桌上翻阅批注(读写)→出门归还钥匙(fclose)
二级C考点解析之文件读写
二级C考点解析之文件读写操作:定义、要点与典型应用
二级C考点解析之文件检测
读写文件时,如果读不出来数据,问题出在哪?是文件到头了,还是中间出了故障?二级C里,「文件检测」就是用一组函数告诉程序:这次读不下去,究竟是哪种情况。
先确认活着(fopen),失败时区分EOF还是IO错,clearerr清创继续
本节要点
- ✓FILE* 是文件操作的唯一入口句柄
- ✓文本与二进制模式的差异在换行符转换
- ✓定位操作的三种偏移基准容易混淆
- ✓feof 与 ferror 是事后状态而非预测
- ✓fclose 隐含 flush,异常退出仍丢数据
课后思考
先遮住答案区,自己想 30 秒再看参考答案。
参考答案fclose 会把缓冲区内容真正写入磁盘、归还文件描述符。不调用可能导致数据丢失(缓冲未刷新)、文件被锁定、超出进程可同时打开的文件数上限。
参考答案用 fseek 移到文件末尾,ftell 取总大小,再反向估算定位,分段读入小块内存逐字符找换行符,直到攒够 1000 行。本质是用定位操作替代一次性加载。
参考答案r+ 下读写共享文件指针。切换方向时不 fseek 调整位置或 fflush 清空缓冲区,可能读不到刚写入的内容。这是文本/二进制模式都要注意的隐藏考点。