文件的读取与操作

文件类型:
 

从文件功能的角度来分类:
 

1.程序⽂件

程序⽂件包括源程序⽂件(后缀为.c),⽬标⽂件(windows环境后缀为.obj),可执⾏程序(windows 环境后缀为.exe)。
2. 数据⽂件
⽂件的内容不⼀定是程序,⽽是程序运⾏时读写的数据,⽐如程序运⾏需要从中读取数据的⽂件,或 者输出内容的⽂件。

按数据的组织形式分:

1.二进制文件

数据在内存中以⼆进制的形式存储,如果不加转换的输出到外存的⽂件中,就是⼆进制⽂件。(数字)

2.文本文件

如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的⽂件就是⽂本⽂件。(即以字符串的方式存储)

例如:

整数10000
以文本文件存储就是字符'1'与四个字符'0'。
以二进制文件存储则是10000的二进制表示(整型,4个字节)。

文件的打开与关闭:

1.

我们程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输⼊输出 操作各不相同,为了⽅便程序员对各种设备进⾏⽅便的操作,我们抽象出了流的概念,我们可以把流 想象成流淌着字符的河。 C程序针对⽂件、画⾯、键盘等的数据输⼊输出操作都是通过流操作的。 ⼀般情况下,我们要想向流⾥写数据,或者从流中读取数据,都是要打开流,然后操作。

2.标准流

那为什么我们从键盘输⼊数据,向屏幕上输出数据,并没有打开流呢?
那是因为C语⾔程序在启动的时候,默认打开了3个流:
stdin - 标准输⼊流,在⼤多数的环境中从键盘输⼊,scanf函数就是从标准输⼊流中读取数据。
stdout - 标准输出流,⼤多数的环境中输出⾄显⽰器界⾯,printf函数就是将信息输出到标准输出
流中。
stderr - 标准错误流,⼤多数环境中输出到显⽰器界⾯。
这是默认打开了这三个流,我们使⽤scanf、printf等函数就可以直接进⾏输⼊输出操作的。
stdin、stdout、stderr 三个流的类型是: FILE* ,通常称为⽂件指针。
C语⾔中,就是通过 FILE* 的⽂件指针来维护流的各种操作的。

3.文件指针

写法为FILE * ptr,FILE*为文件指针类型。
通过⽂件指针变量能够间接找到与它关联的⽂件。

4.文件的打开与关闭

⽂件在读写之前应该先打开⽂件,在使⽤结束之后应该关闭⽂件。
在编写程序的时候,在打开⽂件的同时,都会返回⼀个FILE*的指针变量指向该⽂件,也相当于建⽴了 指针和⽂件的关系。
ANSI C 规定使⽤ fopen 函数来打开⽂件, fclose 来关闭⽂件。
filename为文件名字,stream为文件地址。
这里我们先展示一下两种mode

5.文件的读写函数:

我们可以来对比一下这两组函数;

fprintf(FILE* stream,const char * format,.......);
(适用于所有输出流)

fscanf(FILE* stream,const char * format,.......);
(适用于所有输入流)

sprintf(char * str,const char * format,......);

sscanf(char * str,const char * format,......)


这些之间的区别为:

printf和sacnf为在面板上输出与获取值。

fprintf/fscanf为在printf/scanf前加上文件地址,使其输出与输入在某个文件上执行。

sprintf/sscanf为加上字符数组地址,使得输入与输出均在某个字符数组上执行(输入与输出均自动转变为字符类型)。

中间的format为"%s %d"这种。

size_t fwrite(const void* ptr,size_t size,size_t count,FILE* stream)

 以二进制的形式写入文件,读取也需要以二进制形式读取。
ptr为起始地址,size为单个元素所占字节大小,count为元素个数,stream为文件地址。
返回值为成功写入的元素个数。

size_t fread(void* ptr,size_t size,size_t count,FILE* stream),以二进制形式读取文件内容并放入ptr中。
返回值为成功读取的元素个数。

int feek(FILE* stream,long int offset,int origin)

根据⽂件指针的位置和偏移量来定位⽂件指针。
offset 偏移量
origin 起始位置
origin可供参数:
1.SEEK_SET:文件起始位置。2.SEEK_CUR:文件指针当前位置。3.SEEK_END:文件末尾(最后一个元素后一个位置)。

long int ftell(FILE*stream)
返回文件指针相对于起始位置的偏移量。
 

void rewind(FILE* stream)使指针回到文件起始位置。
 

文件读取结束的判定:

打开一个流的时候,这个流上有两个标记值:
1.是否与到文件末尾。
2.读取时是否发生错误。

int feof(FILE* stream)
判断流上是否有末尾标记,没有标记则返回0,有标记则不为0.

int ferror(FILE* stream)
判断流上是否有错误标记,没有标记则返回0,有标记则不为0.

牢记:
在文件读取的过程中,不能用feof函数的返回值直接来判断文件是否结束。
feof的作用是:当文件读取结束的时候,判断读取结束的原因是否是:遇到文件尾结束。

1.文本文件读取是否结束,判断返回值是否为EOF(fgetc)或NULL(fgets)
2.二进制文件的读取结束判断:判断返回值是否小于实际要读的个数。
例如:
fread判断返回值是否小于实际要读的个数。
 

文件缓冲区系统:

系统自动在内存中微程序每一个正在使用的文件开辟一块文件缓冲区。无论是从内存向磁盘输出数

据还是从磁盘向内存读取数据到内存都要经过缓冲区,分别为输出缓冲区与输入缓冲区。

流程为:程序数据区->输出缓冲区->硬盘->输入缓冲区->程序数据区

当缓冲区填满后才会将数据一起从到硬盘或磁盘上。

以下为案例:

这⾥可以得出⼀个结论:
因为有缓冲区的存在,C语⾔在操作⽂件的时候,需要做刷新缓冲区或者在⽂件操作结束的时候关闭⽂ 件。
如果不做,可能导致读写⽂件的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/492679.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Office办公软件之word的使用(一)

前几天调整公司招标文件的格式,中途遇到一些问题,感觉自己还不是太熟悉操作,通过查阅资料,知道了正确的操作,就想着给记下来。如果再次遇到,也能很快地找到解决办法。 一、怎么把标题前的黑点去掉 解决办法…

latex $$斜体间距太大 解决方案

不要直接$NPSB$, 而是使用$\textit{NPSB}$

Node Sass does not yet support your current environment

项目运行时报错:Node Sass does not yet support your current environment 原因是node版本过高。 解决办法: 使用nvm管理node版本,(如何安装nvm?请点击跳转) 具体步骤如下: 1.查看当前node…

工业新力军!你不知道的工业电脑触摸一体机

作为普通用户,接触最多的电脑肯定是商用台式电脑、笔记本电脑以及平板电脑等,这类电脑产品面向的均是个人需求。那工业级触摸一体机电脑又是什么?它究竟有何特点能够在工业行业中大放异彩呢? 工业电脑的好处是:1、壳子…

电源设计中的去耦电容深入理解及应用实例,非常实用!

很多新手设计电路,通常会觉得电源的设计很简单,不就是线性电源和开关电源吗?找个参考设计抄一下就行了。。。。。 因此,电源往往是我们在电路设计过程中最容易忽略的环节。相反,电源虽然是设计中非常基础的部分&#x…

Python爬虫如何快速入门

写了几篇网络爬虫的博文后,有网友留言问Python爬虫如何入门?今天就来了解一下什么是爬虫,如何快速的上手Python爬虫。 一、什么是网络爬虫 网络爬虫,英文名称为Web Crawler或Spider,是一种通过程序在互联网上自动获取…

接口测试详解

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 1、什么是接口测试 顾名思义,接口测试是对系统或组件之间的接口进行测试&#xff0…

工业级POE交换机的SSH配置步骤

工业级POE交换机的SSH(Secure Shell)配置可以通过以下步骤进行: 1. 连接到POE交换机:使用一个支持SSH协议的终端工具(如PuTTY)连接到POE交换机的管理接口。 2. 登录到POE交换机:输入正确的用户…

c++核心学习--继承2

4.6.7多继承语法 4.6.8菱形继承 利用虚继承解决菱形继承的问题:继承之前加上关键字virtual变为虚继承

C++|类封装、类的分文件编写练习:设计立方体类、点和圆的关系

文章目录 练习案例1:设计立方体类CPP代码 练习案例2:点和圆的关系CPP代码 代码总结类的分文件编写 练习案例1:设计立方体类 设计立方体类(Cube) 求出立方体的面积和体积 分别用全局函数和成员函数判断两个立方体是否相等。 CPP代码 class Cube { pub…

【Hello,PyQt】QTextEdit和QSplider

PyQt5 是一个强大的Python库,用于创建图形用户界面(GUI)。其中,QTextEdit 控件作为一个灵活多用的组件,常用于显示和编辑多行文本内容,支持丰富的格式设置和文本操作功能。另外,QSlider 控件是一…

Mybatis细节详解

上一篇分享了一个Mybatis的快速入门案例&#xff0c;本贴再详细说明几个细节点~ 一.Mapper代理开发 1.定义接口 定义一个接口&#xff0c;并在resources中定义mapper文件夹&#xff0c;文件夹中存放同名的xml配置文件。 2.设置namespace属性 <?xml version"1.0&qu…

信息化平台管理系统智能引擎,互联网企业转型升级的新篇章-亿发

企业管理系统一直在伴随着中国互联网企业的发展而不断进步。过去&#xff0c;企业管理主要依赖于传统的表格和图表记录&#xff0c;但随着互联网企业的崛起&#xff0c;他们开始尝试自己开发简易的管理系统以满足业务需求。随着企业规模和业务复杂度的增加&#xff0c;互联网企…

安达发|印染行业选择APS自动排单软件需要注意什么?

在印染行业中&#xff0c;APS&#xff08;高级计划排程系统&#xff09;自动排单软件的应用可以极大地提升生产效率、减少浪费、优化资源分配&#xff0c;并提高客户满意度。然而&#xff0c;在选择和实施APS自动排单软件时&#xff0c;企业需要注意以下几个关键点&#xff1a;…

【漏洞复现】用友U8 login2.RegisterServlet接口处存在SQL注入漏洞

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

6款最值得推荐的电脑监控软件丨高人气甄选

突然收到老板发问&#xff1a; 就问你抖不抖&#xff01;&#xff01;&#xff01; 后来才得知&#xff0c;老板安装了电脑监控软件。 但具体是哪款不太晓得&#xff0c;鉴于此专门去调研了一番&#xff0c;给大家看看小编的调研成果。 有哪些电脑监控软件呢&#xff1f; 一…

介绍一下Redis的集群模式?

Redis有三种主要的集群模式&#xff0c;用于在分布式环境中实现高可用性和数据复制。这些集群模式分别是&#xff1a;主从复制&#xff08;Master-Slave Replication&#xff09;、哨兵模式&#xff08;Sentinel&#xff09;和Redis Cluster模式。 一、问题解析 主从模式 主从…

【企业动态】吉利雷达汽车来访东胜物联,考察交流,洽谈车联网生态合作

近日&#xff0c;我们非常高兴接待吉利雷达汽车一行莅临东胜物联位于湖州市的生产工厂&#xff0c;进行参观考察&#xff0c;并就未来的合作展开深入商讨与交流。 雷达新能源汽车隶属于吉利控股集团&#xff0c;是一家专注于户外生态的中高端新能源智能汽车企业。雷达通过共享吉…

高阶数据结构 <红黑树>

本文已收录至《数据结构(C/C语言)》专栏&#xff01; 作者&#xff1a;ARMCSKGT 目录 前言正文红黑树简介红黑树整体结构红黑树节点的定义红黑树主体类设计红黑树的插入函数情况一&#xff1a;变色情况二&#xff1a;变色旋转单旋情况双旋情况 完整插入代码 关于红黑树红黑树检…

鸿蒙TypeScript入门学习第2天【TypeScript安装】

1、TypeScript 安装 本文介绍 TypeScript 环境的安装。 我们需要使用到 npm 工具 2、NPM 安装 TypeScript 如果你的本地环境已经安装了 npm 工具&#xff0c;可以使用以下命令来安装。 使用国内镜像&#xff1a; npm config set registry https://registry.npmmirror.com…