当前位置: 首页 > news >正文

文件操作2

7. ⽂件读取结束的判定

7.1 被错误使用的 feof

牢记:在文件读取过程中,不能用 feof 函数的返回值直接来判断文件的是否结束。
feof 的作用是:当文件读取结束的时候,判断读取结束的原因是否是:遇到文件尾结束。
1. 本文件读取是否结束,判断返回值是否为 EOF fgetc ),或者 NULL fgets)
例如:
fgetc 判断是否为 EOF .
fgets 判断返回值是否为 NULL .
2. ⼆进制文件的读取结束判断,判断返回值是否小于实际要读的个数。
例如:
fread判断返回值是否小于实际要读的个数。

 ferror函数是用来判断:是不是读取遇到了错误而结束的。

8. 件缓冲区

ANSI C 标准采用“缓冲文件系统” 处理数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序中每⼀个正在使用的文件开辟⼀块“文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才⼀起送到磁盘上。如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓冲区的大小根据C编译系统决定的。

#include <stdio.h>
#include <windows.h>
//VS2022 WIN11环境测试
int main()
{
FILE*pf = fopen("test.txt", "w");
fputs("abcdef", pf);//先将代码放在输出缓冲区
printf("睡眠10秒-已经写数据了,打开test.txt⽂件,发现⽂件没有内容\n");
Sleep(10000);
printf("刷新缓冲区\n");
fflush(pf);//刷新缓冲区时,才将输出缓冲区的数据写到⽂件(磁盘)
//注:fflush 在⾼版本的VS上不能使⽤了
printf("再睡眠10秒-此时,再次打开test.txt⽂件,⽂件有内容了\n");
Sleep(10000);
fclose(pf);
//注:fclose在关闭⽂件的时候,也会刷新缓冲区
pf = NULL;
return 0;
}
这⾥可以得出⼀个结论:
因为有缓冲区的存在,C语言在操作文件的时候,需要做刷新缓冲区或者在文件操作结束的时候关闭文件。
如果不做,可能导致读写文件的问题。

相关文章:

  • node.js-WebScoket心跳机制(服务器定时发送数据,检测连接状态,重连)
  • C语言刷题第三章(下)
  • WPF未来展望:紧跟技术发展趋势,探索新的可能性
  • 《基于大数据的营养果蔬推荐系统的设计与实现》开题报告
  • C++ STL—— String库
  • Vue3中 ref 与 reactive区别
  • OKHttp3 源码阅读 - Kotlin版本
  • 基于WebRTC技术的EasyRTC嵌入式音视频SDK:多平台兼容与性能优化
  • 以实现生产制造、科技研发、人居生活等一种或多种复合功能的智慧油站开源了
  • GraphRAG 融合 RAG:双剑合璧,精度更上一层楼
  • [超详细]JAVA接入DeepSeek保姆级教学[小白]
  • 图论part3|101.孤岛的总面积、沉没孤岛、417. 太平洋大西洋水流问题
  • 考研408-数据结构完整代码 线性表的顺序存储结构 - 顺序表
  • Unity2D 井字棋
  • 双路快排--力扣215.数组中的第K个最大元素(java)
  • 车载以太网测试-9【网络层】-子网划分的子网掩码VLAN
  • 项目组织管理类型-职能式组织和矩阵式组织的区别
  • 开发策略选择:如何为项目找到最优路径?
  • Keytool常见问题全解析:从环境配置到公钥提取
  • 创新技术引领软件供应链安全,助力数字中国建设
  • 世卫大会拒绝涉台提案,外交部:坚持一个中国原则是人心所向
  • 新冠阳性率升高,专家:新冠变异株致病力没太多变化
  • 肖钢:一季度证券业金融科技投资强度在金融各子行业中居首
  • 中国田径巡回赛西安站完赛:男子跳远石雨豪夺冠,女子跳高刘肼毅折桂
  • 媒体评教师拎起学生威胁要扔下三楼:师风师德不能“悬空”
  • 河南发布高温橙警:郑州、洛阳等地最高气温将达40℃以上