C语言:文件操作(四)

目录

前言

6、文本文件和二进制文件

7、文件读取结束的判定

7.1 被错误使用的feof

8、文件缓冲区

总结


前言

        接上篇,本篇要讲解的是文本文件和二进制文件的内容、文件读取结束的判定以及文件缓冲区。

6、文本文件和二进制文件

        根据数据的组织形式,数据文件被称为文本文件或者二进制文件。

        数据在内存中以二进制的形式存储,如果不加转换的输出到外村,就是二进制文件。

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

        一个数据在内存中是怎么存储的呢?

        字符一律以ASCII形式存储,数值型数据既可以以ASCII形式存储,也可以使用二进制形式存储。

        如果有整数10000,如果以ASCII码的形式输出到磁盘,则磁盘中占5个字节(每个字符一个字节),而二进制形式输出,则在磁盘上只占4个字节(整型大小为4字节)。

测试代码:

#include <stdio.h>int main()
{int a = 10000;FILE* pf = fopen("test.txt", "wb");fwrite(&a, 4, 1, pf);fclose(pf);pf = NULL;return 0;
}

        这是用二进制对文件进行读写,在路径下生成名为“test.txt”的文件,其内容为:

7、文件读取结束的判定

7.1 被错误使用的feof

        在文件读取的过程中,不能用feof函数的返回值直接来判断文件是否结束。而是应用于当文件读取结束的时候,判断文件读取结束的原因:是读取失败结束,还是遇到文件尾端结束。

        现在一些书上对feof的使用是错误的。

        那么下面举两个用于判断文件读取是否结束的方法:

        1、文本文件读取是否结束,判断返回值是否为EOF或者NULL。

        对于不同的函数,其结束时返回的内容不同,如:fgetc结束时返回EOF;fgets结束时返回NULL。

        2、二进制文件的读取结束判断,判断返回值是否小于实际要读取的个数

        例如:fread判断返回值是否小于实际要读的个数。fread函数其中有一个参数是让我们输入要读取内容的个数,它的返回值是实际读取的内容的个数,如果实际的读取个数小于我们一开始设定的读取个数,说明,整个文件被读完了,很好理解吧。

8、文件缓冲区

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

        如上图,在程序数据和文件之间,数据还要经过缓冲区,而不是直接将程序数据放到文件中。这样做的目的是为了提高整个操作系统的效率。

        举个例子,如果系统数据直接和文件交互,那么每当系统产生一个数据,计算机都要经行一次数据传输,但是有了缓冲区,可以将数据暂时保存,等到数据达到一定量的时候,再一次性全部传输到文件中,这样可以提高效率,减少时间成本。

       

总结

        关于C语言文件操作,就讲到这。本知识点共四篇文章C语言:文件操作(一)、C语言:文件操作(二)C语言:文件操作(三)、C语言:文件操作(四)。全面讲解了C语言文件操作的内容,希望对你有所帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式工程师如何摸鱼?

有老铁问我&#xff0c;做嵌入式开发要加班吗&#xff1f; 也不知道搞什么鬼&#xff0c;现在的年轻人对加班这么抵触。 我刚做开发那会&#xff0c;啥也不懂&#xff0c;每天基本都要加班到晚上7-9点不等&#xff0c;我并不抵触加班&#xff0c;因为早早回家&#xff0c;也没什…

HarmonyOS开发实战:【亲子拼图游戏】

概述 本篇Codelab是基于TS扩展的声明式开发范式编程语言编写的一个分布式益智拼图游戏&#xff0c;可以两台设备同时开启一局拼图游戏&#xff0c;每次点击九宫格内的图片&#xff0c;都会同步更新两台设备的图片位置。效果图如下&#xff1a; 说明&#xff1a; 本示例涉及使…

搜狗多线程长尾词挖掘软件-【批量挖掘搜狗大家还在搜和相关搜索长尾词】

搜狗多线程长尾词挖掘软件-【批量挖掘搜狗大家还在搜和相关搜索长尾词】介绍&#xff1a; 1、软件根据放入多个关键词批量多线程去搜狗搜索里拓搜狗大家还在搜和相关搜索。 2、搜狗大家还在搜和相关搜索长尾词质量好。 3、一个关键词可以拓19个高质量相关长尾词。 4、软件自…

msyql中SQL 错误 [1118] [42000]: Row size too large (> 8126)

场景&#xff1a; CREATE TABLE test-qd.eqtree (INSERT INTO test.eqtree (idocid VARCHAR(50) NULL,sfcode VARCHAR(50) NULL,sfname VARCHAR(50) NULL,sfengname VARCHAR(50) NULL,…… ) ENGINEInnoDB DEFAULT CHARSETutf8 COLLATEutf8_general_ci;或 alter table eqtre…

【Java】jdk1.8 Java代理模式,Jdk动态代理讲解(非常详细,附带class文件)

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 一、什么是代理模式 想要学代理模式&#xff0c;我们就要先弄清一个概念“什么是代理”&#xff1f; 在我们的现实生活中&#xff0c;你或许不少听过关于代理的名词&#xff0c;如&#xff1a;代理商。那什么又叫做代理…

安装SSMS出现错误和SSMS连接数据库失败

目录 1.点击图片下安装的时候&#xff0c;出现0x80070643错误 解决办法&#xff1a; 1,如果是是第一次安装的话&#xff0c;重新启动电脑&#xff0c;把原来下载的SSMS删除掉&#xff0c;在重新下载安装 2.如果是原来就下载过&#xff0c;先重启一下&#xff0c;如果还不可以就…

MySQL 基础使用

文章目录 一、Navicat 工具链接 Mysql二、数据库的使用1.常用数据类型2. 建表 create3. 删表 drop4. insert 插入数据5. select 查询数据6. update 修改数据7. delete 删除记录truncate table 删除数据 三、字段约束字段1. 主键 自增delete和truncate自增长字段的影响 2. 非空…

Java——代码块

目录 一.代码块概念以及分类 二.普通代码块 三.构造代码块 四.静态代码块 一.代码块概念以及分类 使用 {} 定义的一段代码称为代码块。根据代码块定义的位置以及关键字&#xff0c;又可分为以下四种&#xff1a; 普通代码块构造块静态块同步代码块&#xff08;后续讲解多…

ChatGPT 可以预测未来吗?

推荐 4月13日的一篇有趣的 paper&#xff0c;特来分享。 &#x1f449; 当前的大型语言模型&#xff08;LLMs&#xff09;具有强大的数据合成和推理能力&#xff0c;但它们在直接预测尚未发生事件的准确性上常常受到限制。传统的预测方法依赖于直接询问模型关于未来的问题。 …

Python爬虫入门教程!

什么是爬虫? 爬虫就是自动获取网页内容的程序&#xff0c;例如搜索引擎&#xff0c;Google&#xff0c;Baidu 等&#xff0c;每天都运行着庞大的爬虫系统&#xff0c;从全世界的网站中爬虫数据&#xff0c;供用户检索时使用。 爬虫流程 其实把网络爬虫抽象开来看&#xff0c;它…

Python编程与算法面试-编程面试的重点

在求职面试的过程中&#xff0c;编程能力也是面试官非常看重的一项能力。而对于编程这项能力主要的考察点也有三个维度&#xff1a; 初级&#xff1a;编程的基本功 编程的基本功主要考察的编程语言的基本语法&#xff0c;原理知识&#xff0c;以及一些在编程过程中的常见问题…

v-for中涉及的key

一、为什么要用key&#xff1f; key可以标识列表中每个元素的唯一性&#xff0c;方便Vue高效地更新虚拟DOM&#xff1b;key主要用于dom diff算法&#xff0c;diff算法是同级比较&#xff0c;比较当前标签上的key和标签名&#xff0c;如果都一样&#xff0c;就只移动元素&#…