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

C语言之文件操作(剩余部分)

上篇博客字数到极限了,给大家把内容补充在这一篇,我们还剩下文件读取结束的判定和文件缓冲区的内容没有介绍,让我们开始下面的学习吧!


目录

1.文件读取结束的判定

1.1feof函数

1.2ferror函数

代码示例

2.文件缓冲区

2.1fflush函数

代码示例


1.文件读取结束的判定

关于文件读取结束,它到底是遇到错误结束的还是遇到文件结束标志而结束的需要我们进行判断,此时,我们一般用到两个函数feof函数和ferror函数,让我们来认识一下它们

1.1feof函数

1.函数功能:测试流(文件流或者标准输出流)上的文件结尾

2.头文件:#include<stdio.h>

3.使用格式:int feof( FILE *stream );

4.返回值:

如果尝试读取超过文件末尾的第一次读取操作之后返回一个非零值

如果当前位置不是文件末尾,则返回0

5.但是在我们使用这个函数时,经常有同学错误使用它,归根到底,还是对这个函数不熟悉所导致的,这就需要我们沉下心来,好好看清楚它的具体使用方法

在文件读取过程中,我们是不能用feof函数的返回值直接用来判断文件是否结束的

而是应该应用于当文件读取结束的时候,判断文件是因为读取失败结束还是遇到文件尾而结束

这也就是说,feof是来告诉你文件读取失败的原因的,而不是给你返回一个数值的

例如:

文本文件读取(输出)是否结束,若是使用fgetc函数要判断返回值是否为EOF

二进制文件的读取(输出)是否结束,若是使用fread函数,要判断它的返回值是否小于实际要读的个数

函数具体代码我们与ferror函数一起实现

1.2ferror函数

1.函数功能:测试流(文件流或者标准输出流)中的错误

2.头文件:#include<stdio.h>

3.使用格式:int ferror( FILE *stream );

4.返回值:

如果没有发生错误,ferror将返回0。

如果发生错误,它将返回一个非零值。

下面我们看段代码来加深理解

代码示例


//判断文本文件读取结束
int main()
{int c = 0;//以只读模式打开这个文本文件FILE* pf = fopen("test2.txt", "r");if (pf == NULL){perror("fopen");return 1;}//fgetc函数当读取文件失败或者遇到文件结束标志时,都会返回EOFwhile ((c = fgetc(pf)) != EOF){putchar(c);}printf("\n");if (ferror(pf))//文件读取失败遇到错误而结束printf("I/O error when reading");else if (feof(pf))//文件遇到结束标志而结束printf("End of file reached successfully");fclose(pf);pf = NULL;return 0;
}

运行结果

这就说明了,文件确实是因为遇到了文件结尾标志而结束的,而不是遇到了错误

我们总结一下:

feof:返回真,说明文件是正常遇到文件结束标志而结束的

ferror:返回真,说明是文件在读取过程中出错了而结束的

2.文件缓冲区

ANSIC标准采用“缓冲文件系统”来处理数据文件的

所谓缓冲文件系统是指系统自动的在内存中为程序中每一个正在使用的文件开辟一块“文件缓冲区”

从内存向磁盘输出(写入)数据,会先把数据送到内存中的缓冲区,当装满缓冲区后,再从缓冲区一起送到磁盘

从磁盘向计算机输入(读取)数据,会先从磁盘文件中读取数据输入到内存缓冲区,充满缓冲区后,再从缓冲区逐个的将数据送到程序缓冲区

此外,缓冲区的大小是根据C语言编译系统决定的

此时,我们就知道了

数据并不是直接就可以放到磁盘文件中的,只有满足

1.缓冲区放满

2.主动刷新缓冲区

这两种的其中一个才会把数据放到磁盘文件中

这就又引出了一个新的函数fflush,它就是用来刷新缓冲区的函数,此时,大家可能就又会有疑问了,我们前面所写的代码示例也没有出现fflush函数,为什么就被写入文件了,这是因为fclose函数在关闭文件时,也会刷新缓冲区

因为有缓冲区的存在,C语言在操作文件时,需要刷新缓冲区域或者在文件操作结束时关闭文件,如果不这样做,可能导致文件读写失败,数据丢失,此外,缓冲区的大小是可以修改的,我们在这里不做太多说明,以后遇到在进行讲解

2.1fflush函数

1.函数功能:刷新缓冲区

2.头文件:#include<stdio.h>

3.使用格式:int fflush( FILE *stream );

4.返回值:

刷新成功:返回值为0,在指定的流没有缓冲区或只打开进行读取的情况下,也会返回值0

刷新失败:返回值EOF

我们来看个例子加深理解

代码示例

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<errno.h>//测试缓冲区刷新函数int main()
{FILE* pf = fopen("test.txt", "w");if (pf == NULL){perror("fopen");return 1;}fputs("hello world\n", pf);//没有进行刷新,此时代码放在缓冲区printf("睡眠10s,我们已经写入数据了,打开对应的test.txt文件发现没有内容\n");Sleep(10000);printf("开始刷新缓冲区\n");fflush(pf);//此时,才将写入缓冲区的数据放到文件(磁盘)中printf("睡眠10s,此时,再次打开test.txt文件,文件中出现了被写入的内容\n");Sleep(10000);fclose(pf);//在关闭文件的同时,也会刷新缓冲区pf = NULL;return 0;
}

我们运行代码,它首先出现

然后我们打开对应文件,发现文件中确实没有内容,这也就证明了确实有缓冲区的存在

然后我们在返回程序代码运行窗口,此时出现提示

我们再次打开对应文件,发现文件中已经写入了内容


这就是C语言关于文件操作的全部内容了,这部分内容比较多,大家如果感兴趣的话,一定要戒骄戒躁,沉下心来认真学习,最重要的还是要多敲代码,巩固知识!

ok!大家下期再见!!!

相关文章:

C语言之文件操作(剩余部分)

上篇博客字数到极限了&#xff0c;给大家把内容补充在这一篇&#xff0c;我们还剩下文件读取结束的判定和文件缓冲区的内容没有介绍&#xff0c;让我们开始下面的学习吧&#xff01; 目录 1.文件读取结束的判定 1.1feof函数 1.2ferror函数 代码示例 2.文件缓冲区 2.1fflu…...

【PC】开发者日志:竞技比赛验证系统强化

各位玩家大家好&#xff01;欢迎收看本期开发者日志。 在11月1日发布的第26赛季第2轮更新公告中&#xff0c;我们提到了有关强化比赛验证系统的内容。想必各位玩家一定会对我们加强验证系统的背景和意图感到好奇&#xff0c;为此我们想通过今天这篇反作弊开发者日志来向大家更详…...

c++用map,创建类似于python中的字典

1.创建 #include <map> #include <string> #include <iostream>using namespace std; int main() {/*using std::map;using std::string;using std::cout;*/map<string, string> myMap1 {{"Name", "ClearLove"},{"Gender&q…...

VuePress介绍及使用指南

VuePress是一个基于Vue.js的静态网站生成工具&#xff0c;它专注于以Markdown为中心的项目文档。VuePress具有简单易用的特性&#xff0c;同时提供了强大的自定义和扩展性。在本文中&#xff0c;我们将介绍VuePress的基本概念&#xff0c;并提供一个简单的使用指南。 什么是Vue…...

Spring-Security前后端分离权限认证

前后端分离 一般来说&#xff0c;我们用SpringSecurity默认的话是前后端整在一起的&#xff0c;比如thymeleaf或者Freemarker&#xff0c;SpringSecurity还自带login登录页,还让你配置登出页,错误页。 但是现在前后端分离才是正道&#xff0c;前后端分离的话&#xff0c;那就…...

Django中Cookie和Session的使用

目录 一、Cookie的使用 1、什么是Cookie&#xff1f; 2、Cookie的优点 3、Cookie的缺点 4、Django中Cookie的使用 二、Session的使用 1、什么是Session&#xff1f; 2、Session的优点 3、Session的缺点 4、Django中Session的使用 三、Cookie和Session的对比 总结 D…...

云原生周刊:KubeSphere 3.4.1 发布 | 2023.11.13

开源项目推荐 Inspektor Gadget Inspektor Gadget 是一组用于调试和检查 Kubernetes 资源与应用程序的工具&#xff08;或小工具&#xff09;。它在 Kubernetes 集群中管理 eBPF 程序的打包、部署和执行&#xff0c;包括许多基于 BCC 工具的程序&#xff0c;以及一些专为在 I…...

逐帧动画demo

用这一张图实现一个在跑的猎豹的动画 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X…...

Mongodb 中,与索引相关的监控指标

Mongodb为集合添加索引&#xff0c;能够提高查询的效率&#xff0c;减少查询过程中检索文档的数量&#xff0c;改变文档检索的方式。 索引&#xff0c;采用集合中的一部分数据&#xff0c;构建了B tree&#xff0c;支持mongodb的高效检索。除$indexStats命令外&#xff0c;mong…...

图论14-最短路径-Dijkstra算法+Bellman-Ford算法+Floyed算法

文章目录 0 代码仓库1 Dijkstra算法2 Dijkstra算法的实现2.1 设置距离数组2.2 找到当前路径的最小值 curdis&#xff0c;及对应的该顶点cur2.3 更新权重2.4 其他接口2.4.1 判断某个顶点的连通性2.4.2 求源点s到某个顶点的最短路径 3使用优先队列优化-Dijkstra算法3.1 设计内部类…...

OpenCV 实现透视变换

一&#xff1a;OpenCV透视变换的概念 仿射变换(affine transform)与透视变换(perspective transform)在图像还原、图像局部变化处理方面有重要意义。通常&#xff0c;在2D平面中&#xff0c;仿射变换的应用较多&#xff0c;而在3D平面中&#xff0c;透视变换又有了自己的一席之…...

ChinaSoft 论坛巡礼|开源软件供应链论坛

2023年CCF中国软件大会&#xff08;CCF ChinaSoft 2023&#xff09;由CCF主办&#xff0c;CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办&#xff0c;将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…...

VUE 组合式API

响应式 data 选项式API_响应式 <template><h3>选项式API</h3><p>{{ message }}</p> </template> <script> export default {data(){return{message:"选项式API 绑定数据"}} } </script>组合式API_响应式 <…...

尝试使用php给pdf添加水印

在开发中增加pdf水印的功能是很常见的&#xff0c;经过实验发现这中间还是会有很多问题的。第一种模式&#xff0c;采用生成图片的方式把需要添加的内容保存成图片&#xff0c;再将图片加到pdf中间&#xff0c;这种方法略麻烦一些&#xff0c;不过可以解决中文乱码的问题&#…...

ubuntu上安装edge浏览器

1下载edge浏览器 官网下载 edge浏览器的linux版本可在上面的官网中寻找。 我选择的是Linux(.deb)。 2 安装 可在终端的edge安装包所在的路径下输入下面命令安装。 sudo dpkg -i edge安装包的名称.deb3 安装可能存在的问题 1dpkg:依赖关系问题使得edge-stable的配置工作不…...

动态切换 Spring Boot 打包配置:使用 Maven Profiles 管理 JAR 和 WAR

引言 在多环境开发中&#xff0c;我们经常需要根据部署环境来改变 Spring Boot 应用的打包方式。本文将探讨如何使用 Maven Profiles 结合依赖排除来动态地切换 JAR 和 WAR 打包配置。 1. 修改 pom.xml 以支持 WAR 包 转换 Spring Boot 应用从 JAR 到 WAR 时&#xff0c;首先…...

微信小程序使用阿里巴巴矢量图标

一&#xff0c;介绍 微信小程序使用图标有两种方式&#xff0c;一种是在线获取&#xff0c;一种是下载到本地使用&#xff0c; 第一种在线获取的有个缺点就是图标是灰色的&#xff0c;不能显示彩色图标&#xff0c;而且第一种是每次请求资源的&#xff0c;虽然很快&#xff0…...

使用JAVA pdf转word

使用spire.pdf 非常简单。 查看 https://mvnrepository.com/artifact/e-iceblue/spire.pdf 注意&#xff0c;这个包在 e-iceblue 下。 下面开始撸代码 先来pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://mav…...

成都瀚网科技有限公司抖音带货的正规

成都瀚网科技有限公司&#xff0c;一家在科技领域有着深厚积累的公司&#xff0c;近年来也开始涉足电子商务领域&#xff0c;特别是在抖音等短视频平台上进行带货活动。在这个充满机遇与挑战的时代&#xff0c;该公司以其独特的商业模式和运营策略&#xff0c;正在赢得消费者的…...

windows服务器热备、负载均衡配置

安装网络负载平衡 需要加入的服务器上全部需要安装网络负载平衡管理器 图形化安装&#xff1a;使用服务器管理器安装 在服务器管理器中&#xff0c;使用“添加角色和功能”向导添加网络负载均衡功能。 完成向导后&#xff0c;将安装 NLB&#xff0c;并且不需要重启计算机。 …...

Lampiao 靶场

Lampiao 靶场完整渗透解析一、靶场环境信息攻击机&#xff08;Kali&#xff09;IP&#xff1a;192.168.146.128靶机 IP&#xff1a;192.168.146.129目标&#xff1a;获取靶机 root 权限与 flag二、步骤 1&#xff1a;信息收集&#xff08;端口与服务扫描&#xff09;nmap -p- -…...

BetterJoy完整配置指南:5分钟让Switch手柄在PC上完美运行

BetterJoy完整配置指南&#xff1a;5分钟让Switch手柄在PC上完美运行 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitcode.c…...

从社交关系到分子结构:图解GCN(图卷积网络)到底在‘看’什么?

从社交关系到分子结构&#xff1a;图解GCN&#xff08;图卷积网络&#xff09;到底在‘看’什么&#xff1f;想象一下&#xff0c;你刚搬到一个新社区&#xff0c;想快速了解周围的邻居。最直接的方式是什么&#xff1f;不是挨家挨户敲门&#xff0c;而是通过社区活动认识几位关…...

3步解锁专业级MMD创作:Blender插件如何重塑二次元动画工作流

3步解锁专业级MMD创作&#xff1a;Blender插件如何重塑二次元动画工作流 【免费下载链接】blender_mmd_tools MMD Tools is a blender addon for importing/exporting Models and Motions of MikuMikuDance. 项目地址: https://gitcode.com/gh_mirrors/bl/blender_mmd_tools …...

HarmonyOS ArkTS DateUtil 日期增减与日历计算完整指南

文章目录 背景一、引言二、日期增减方法详解使用示例 三、日历计算方法详解四、Demo 演示&#xff1a;日期增减结果展示五、Demo 演示&#xff1a;月历视图完整实现六、日历视图关键点解析为什么要填充前置空格&#xff1f;getLastDayOfMonth 的实现技巧 七、小结 背景 近期发现…...

如何快速掌握MoveIt2:面向ROS 2开发者的工业机器人运动规划完整指南

如何快速掌握MoveIt2&#xff1a;面向ROS 2开发者的工业机器人运动规划完整指南 【免费下载链接】moveit2 :robot: MoveIt for ROS 2 项目地址: https://gitcode.com/gh_mirrors/mo/moveit2 想要为你的机器人实现智能运动规划吗&#xff1f;MoveIt2作为ROS 2生态中最强大…...

League Akari:如何通过LCU API实现英雄联盟游戏流程的智能化管理?

League Akari&#xff1a;如何通过LCU API实现英雄联盟游戏流程的智能化管理&#xff1f; 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power &#x1f680;. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit Leag…...

UE4SS终极指南:从零开始掌握虚幻引擎脚本系统

UE4SS终极指南&#xff1a;从零开始掌握虚幻引擎脚本系统 【免费下载链接】RE-UE4SS Injectable LUA scripting system, SDK generator, live property editor and other dumping utilities for UE4/5 games 项目地址: https://gitcode.com/gh_mirrors/re/RE-UE4SS UE4S…...

3PEAK思瑞浦 TPA6531-S5TR SOT23-5 运算放大器

特性 供电电压:1.75V至5.5V 偏移电压:1.5mV(最大值) 最大可调工作频率:300kHz&#xff0c;斜率:0.15V/us 轨到轨输入和输出 0.1赫兹至10赫兹电压噪声:1伏峰值 开关电源时无显著输出抖动 低功耗:每通道最大25安培 工作温度范围:-40C至125C...

基于STM32WL与LoRaWAN的远程空气质量监测系统全栈开发实践

1. 项目概述&#xff1a;构建一个远程空气质量监测系统最近在做一个挺有意思的玩意儿&#xff1a;一个能自己找地方待着、靠太阳能供电&#xff0c;然后把周围空气数据悄无声息传回来的远程监测终端。核心想法很简单&#xff0c;就是想知道某个犄角旮旯&#xff0c;比如工厂周边…...