C语言文件操作复习回顾(2)

news2025/1/10 17:04:53

TIPS

  1. 文件的顺序读写:fgetc, fputc, fputs(一行字符串的输出+\n注意一下), fgets(一行字符串的输入+\n三特性),fprintf(格式化字符串的输出+联想printf很简单),fscanf(格式化字符串的输入+文件指针自己会换行)+ sprintf(随意粘连任何已有东西+自己添油加醋+组成一个新字符串)+sscanf(随意从已有字符串中抠来东西+放到其他变量当中)+fread + fwrite
  2. 文件里面放的要么就是二进制,要么就是ASCII码,点开文件,会把文件内容全部解析成字符形式给你看,所以二进制文件看不懂是乱码,而文本文件看得懂

文件的随机读写(指哪打哪)

  1. 一旦打开文件,有个闪烁的光标(其实就是说刚开始打开文件的时候,文件指针是默认指向第一个字符的),这是最开始的状态。
  2. 然后当你用fgetc()输入一个字符后,此时文件指针就不指向第一个字符了,往后走一步指向第二个字符去了。
  3. 再用fgetc()不断去读,文件指针就不断往后偏移,一个一个字符不断读下去。这就是顺序读写,那如果说你想控制顺序跳过字符或者回去读之类的…这时候就用fseek去手动调整指针指向的位置
  4. 但无论任何时候,默认的"读一下,往右偏移一个字符"这个铁律永远都在

fseek()

在这里插入图片描述

  1. 根据文件指针FILE*的当前位置和你给出的偏移量来让它这个文件指针呢定位到你想要的位置上去。
  2. 就是说我想让文件指针偏移到哪里,你就给我偏移到哪里
  3. 它这个函数有三个参数:FILE* stream,long int offset(偏移量),int origin(起始位置)
  4. 其中第三个参数int origin是有选项的。关于这个参数有三个选项:SEEK_SET,就是说从文件的起始位置开始算起;SEEK_CUR,从当前文件指针的位置算起;SEEK_END,就是说从文件的末尾开始算起。
  5. 演示代码:
    在这里插入图片描述
int main()
{
	FILE* pf = fopen("test.txt", "r");
	if (pf == NULL)
	{
		perror("fopen failed");
		return;
	}
	fseek(pf, 3, SEEK_SET);
	char arr[25] = { 0 };
	fgets(arr, 22, pf);
	printf("%s\n", arr);
	fclose(pf);
	return 0;
}

在这里插入图片描述

ftell() 当前指针位置相当于起始位置的偏移量

在这里插入图片描述

rewind() 让指针回到起始位置

在这里插入图片描述

文件知识总结回顾

  1. 文件的话被分为程序文件与数据文件,然后数据文件又被分为文本文件与二进制文件。
  2. 当你打开文件的时候,都是把文件内容解析成字符呈现在电脑屏幕面前的你。
  3. 首先,数据在电脑当中是以二进制补码的形式存储,如果说对内存里面的数据(纯纯的二进制)不加以任何转换输出到外存的话,比如说给他输出到硬盘上面,对于硬盘而言,它唯一的存储形式就是文件存储,此时此刻就是二进制文件。
  4. 那我如果想要在外层上以ACSII码值的形式存储,那么就需要在存储之前转换。以ASCII字符形式存储的都是文本文件。
  5. 一个整形占四个字节,一个字节就是八个二进制位,或者说八个比特位,每四个二进制位可以合成一个16进制位,因此一个字节相当于也是两个16进制位。
  6. 当然,这里面还有一个大小端的问题,如果你在内存里面以小端形式存储,那么也会直接以小端的形式写到文件里面去(对于二进制文件)
  7. 实例演示
    1. 比如说对于一个数值10000。如果我要把它存起来。我们知道这个10000在内存里面就是00…0010011100010000。如果说我们把这个二进制序列不做任何转换直接存到文件里面去,此时这个文件就是二进制文件。
    2. 如果说我们把10000的每一位都当成字符即:“1”,“0”,“0”,“0”,“0”。然后把每个字符对应的ASCII码值存到文件里面去。这时候这个文件就是文本文件。
    3.
int main()
{
	FILE* pf = fopen("test.txt", "wb");
	if (pf == NULL)
	{
		perror("fopen failed");
		return;
	}
	int num = 10000;
	fwrite(&num, sizeof(num), 1, pf);
	fclose(pf);
	return 0;
}

在这里插入图片描述
在这里插入图片描述

文件缓冲区回顾

在这里插入图片描述
在这里插入图片描述

  1. ANSIC标准采用“缓冲文件系统”来处理数据文件。
  2. 所谓“缓冲文件系统”,指系统自动地在内存中为程序中正在运行的每一个文件开辟一块“文件缓冲区”。
    (文件就是在电脑磁盘里面)
  3. 内存数据输出/写到磁盘里面,其会先被送到内存中的输出缓冲区,装满缓冲区后再一次性送到磁盘里面/或者说我主动刷新一下缓冲区里面的数据然后放到硬盘里面去。
    (然后假设我缓冲区一直没满,但是我要关闭文件了,这时候没关系,系统会刷新一份缓冲区的数据,这时候不管满没满了,文件都要关闭了,直接把数据放到文件里面去,然后才关闭文件,所以fclose本身关闭文件的时候也会刷新缓冲区的)
  4. 如果从磁盘里面往内存输入/读数据,数据也是先放到缓冲区。充满缓冲区后,然后再从缓冲区里面逐个地将数据送到程序数据区(程序变量等)。
  5. 缓冲区大小根据C编译系统决定。
  6. 缓冲区也是在内存里面的,当然了,摸不着看不到的。
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pyspark 实验二,rdd编程

1.环境准备 start-all.sh启动Hadoop ./bin start-all.sh 启动spark 上传数据集 1.求该系总共多少学生 linessc.textFile("file:///home/data.txt") res lines.map(lambda x:x.split(",")).map(lambda x:x[0]) sumres.distinct() sum.cont() 2.求该系设置…

【MybatisPlus快速入门】—— 进阶入门

进阶篇 1.1 映射专题 Mybatis 框架之所以能够简化数据库操作,是因为他内部的映射机制,通过自动映射,进行数据的封装,我们只要符合映射规则,就可以快速高效的完成SQL操作的实现既然 MybatisPlus 是基于Mybatis 的增强…

程序员如何能提高自己的编程水平?

这些实用的小建议,能帮你迅速地提高编程水平: 不要做无意义的奋斗 拒绝喊口号和无意义的奋斗,包括但不限于: ①做了计划表却从未有执行的一天; ②每天都是最早来、最晚走,但是工作进度趋近于0&#xff1b…

ASP.NET Core MVC 从入门到精通之接化发(一)

随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生&#xff0c…

PathCore:IAD文献解读

论文链接:[Towards Total Recall in Industrial Anomaly Detection]Towards Total Recall in Industrial Anomaly Detection :数据集, :标签 : 在ImageNet上预训练后的网络 第 张图 网络中第 层 1. Locall…

Sentinel学习笔记

Sentinel 官方文档: https://github.com/alibaba/Sentinel/wiki/%E4%B8%BB%E9%A1%B5 SpringCloud Alibaba: https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_spring_cloud_alibaba_sentinel 是什么…

丝滑的打包部署,一套带走~

以下文章来源于悟空聊架构 ,作者悟空聊架构 本文主要内容如下: 目录 一、背景 Docker打包部署方案 项目背景:新项目的后端框架是刚起步,搭建的是一套微服务框架,基础服务有网关 Gateway, Nacos 注册中心…

为什么stm32gpio引脚的翻转速度最大只有18Mhz

(1). GPIO 引脚速度:GPIO_Speed_2MHz (10MHz, 50MHz) ; 又称输出驱动电路的响应速度:(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路,通过选择速度来选择…

史上最全测试开发工具视频教程详解(含自动化、性能、接口、抓包)

目录 一、UI自动化测试工具 1. uiautomator2 2. Appium 3. ATX-Test 4. Airtest 5. ATXServer2 6. STF 7. Appetizer 二、APP稳定性测试工具 8. UICrawler 9. Maxim 10. AppCrawler 三、APP性能测试工具 11. SoloPi 12. GT 四、抓包工具 13. AnyProxy …

pytorch安装教程(二)

一直用的pytorch1.2,有点老了,想换个新版本,换成了pytorch2.0. torch安装 安装过程最重要的就是cuda、cudnn的版本和pytorch对应。 因为要在GPU上跑代码。 删除老旧torch 我用的软件是anaconda,因为可以创建虚拟环境。 步骤&…

LAZADA将缩短履约时效,卖家发货倍感压力

Lazada的跨境卖家们,恐怕又要头疼了。 近日, Lazada官方宣布,为了提升消费者体验,平台将调整商家履约订单时效。从2023年5月4日起生成的订单履约时效将有所更新。 具体而言,内地、香港和Laz Go Global的履约节点为“点…

Qt Quick - MessageDialog 消息提示框

MessageDialog 使用总结一、概述二、使用1. 例子一2. 例子二三、常用属性一、概述 MessageDialog 最基本的用例是弹出警告框。它还允许用户根据启用的按钮以各种方式进行响应。对话框最初是不可见的。你需要首先按需设置属性,然后将visible设置为true或调用open()。…

FIFO设计笔记(双口RAM、同步FIFO、异步FIFO)Verilog及仿真

文章目录0、前言0.1、FIFO0.2、FIFO与RAM1、异步双口RAM1.1、原理1.2、Verilog代码1.3、tb仿真2、FIFO设计前瞻知识2.1、格雷码2.1.1、二进制转格雷码Verilog代码tb仿真2.1.2、格雷码转二进制Verilog代码tb仿真2.2、独热码3、同步FIFO3.1、同步FIFO设计原理3.1.1、设计原理3.1.…

SpringBoot中操作Redis通过所有可能的key查询存在的key并解析为对象实体的通用方法

场景 SpringBoot中操作Redis的特殊操作-批量查询(通过key的集合批量查杜绝模糊搜索)、查询并解析对象list: SpringBoot中操作Redis的特殊操作-批量查询(通过key的集合批量查杜绝模糊搜索)、查询并解析对象list_霸道流氓气质的博客-CSDN博客 在上面讲操作redis中特…

【未来已来】人人都说GPT,人人都怕GPT,人人都用GPT

文章目录前言一、GPT是什么?二、当GPT和AI遇到摄影总结前言 ChatGPT是由美国OpenAI研发的能够通过自然语言驱动的人工智能技术工具,因为它强大的执行力和任务处理能力,一经亮相就引起了极大的关注。与之类似,在图像智能生成方面&…

Java 自学 - 接口与继承 接口

设计 Java 的接口 在设计 LOL 的时候,进攻类英雄有两种,一种是进行物理系攻击,一种是进行魔法系攻击 这时候,就可以使用接口来实现这个效果。 接口就像是一种约定,我们约定某些英雄是物理系英雄,那么他们…

交接机的基本原理

第七章:交接机的基本原理 在网络中传输数据时需要遵循一些标准,以太网协议定义了数据帧在以太网上的传输标准,了解以太网协议是充分理解数据链路层通信的基础。以太网交换机是实现数据链路层通信的主要设备,了解以太网交换机的工作…

抽象轻松web

不管是求最大值,还是最小值,无论是整数还是小数,数据类型是不是一样的 它们的本质上都是判断,在判断的基础上不断的变换,增加判断条件,增加判断过程罢了 判断需要两个本质 1 :两个以上的元素…

Redis高可用高性能缓存的应用系列2 - 事务机制和IO多路复用、持久化

概述 Redis高可用高性能缓存的应用系列的第二篇,主要介绍Redis事务机制和IO多路复用、和持久化的知识点。 Redis事务机制 Redis事务机制,和Mysql有大的不同,分为4步进行执行: 1.事务提交前,先检查命令语法是否正确…

【2023版】基于部标JT808JT1078车载视频位置监控平台介绍-开源项目

演示地址:http://gps.lingx.com 账号:admin 密码:123456 部标/苏标设备入口 IP:47.100.112.218 ; 端口:8808 1.项目背景 “GPS/GPRS车辆智能管理系统”具备车辆实时定位监控、远程监控调度、行驶路线偏移…