文件的随机读写

fseek

 

fseek这个函数的作用是什么?

 我们知道,如果对一个文件指针进行加减操作的话,这个文件指针会指向下一个文件,那么问题来了,我们如果想访问这个文件中的某一个内容,这个时候该怎么办呢,我们又不能对这个文件指针进行加减操作。(因为你如果对这个文件指针进行加减操作,他就指向上一个或者下一个文件了)。

这个时候就可以用fseek这个函数了,它可以让你访问这个文件里的任何内容;

比如;

一个名叫test.dat的 文件中有这些内容: a b c d e f

当你用fopen(“test.dat”,"r")的只读形式来打开这个文件

并用:fgets(pf) 这个函数将这个文件的内容放进内存中,

你可以将放进内存的每个字母打印出来:

int ch = fget(pf);

printf("%c\n",ch);


	int ch = fgetc(pf);
	printf("%c\n",ch);//a
	ch = fgetc(pf);
	printf("%c\n", ch);//b
	ch = fgetc(pf);
	printf("%c\n", ch);//c
	ch = fgetc(pf);
	printf("%c\n", ch);//d

但这个时候,如果你不想打印下一个字母了,你想打印一下之前打印过的内容,

比如你想打印b,

这个时候就可以用fseek了;

看代码:


#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	//打开文件
	FILE* pf = (FILE*)fopen("test.dat", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	//读文件
	int ch = fgetc(pf);
	printf("%c\n",ch);//a
	ch = fgetc(pf);
	printf("%c\n", ch);//b
	ch = fgetc(pf);
	printf("%c\n", ch);//c
	ch = fgetc(pf);
	printf("%c\n", ch);//d

	fseek(pf, -3, SEEK_CUR);
	ch = fgetc(pf);
	printf("%c\n", ch);

		
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

看解析

 看运行结果;

 如果你因为文件指针走得太远而不知道偏移量咋办?

这个时候你可以用ftell 

ftell这个函数可以告诉你文件指针相对起始位置的偏移量 

 看代码

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	//打开文件
	FILE* pf = (FILE*)fopen("test.dat", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	//读文件
	int ch = fgetc(pf);
	printf("%c\n",ch);//a
	ch = fgetc(pf);
	printf("%c\n", ch);//b
	ch = fgetc(pf);
	printf("%c\n", ch);//c
	ch = fgetc(pf);
	printf("%c\n", ch);//d

	long int ret = ftell(pf);
	printf("%d\n", ret);

		
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

看运行结果

如何让文件指针回到起始位置——rewind

看代码

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	//打开文件
	FILE* pf = (FILE*)fopen("test.dat", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}

	//读文件
	int ch = fgetc(pf);
	printf("%c\n",ch);//a
	ch = fgetc(pf);
	printf("%c\n", ch);//b
	ch = fgetc(pf);
	printf("%c\n", ch);//c
	ch = fgetc(pf);
	printf("%c\n", ch);//d

	rewind(pf);           //rewind 可以让文件指针回到起始位置,

	long int ret = ftell(pf);
	printf("%d\n", ret);  //因为我之前rewind,所以这里相对起始位置的偏移量就是0

		
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

看运行结果

文本文件和二进制文件
根据数据的组织形式,数据文件被称为文本文件或者二进制文件。
数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件。
如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件。
一个数据在内存中是怎么存储的呢?
字符一律以ASCII形式存储,数值型数据既可以用ASCII形式存储,也可以使用二进制形式存储。
如有整数10000,如果以ASCII码的形式输出到磁盘,则磁盘中占用5个字节(每个字符一个字节),而二进制形式输出,则在磁盘上只占4个字节(VS2013测试)
 

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

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

相关文章

基于支持向量机SVM的脑部肿瘤识别,脑电波样本熵提取

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 SVM应用实例,基于SVM的的脑部肿瘤识别分类预测 代码 结果分析 展望 支持向量机SVM的详细原理 SVM的定义 支持向量机(support vector machines, SVM)是一种二分类模型,它…

下一代的新操作系统就是ChatGPT!

什么是CHatgpt&#xff1f; ChatGPT是人工智能研究实验室OpenAI在2022年11月30日推出的聊天机器人模型&#xff0c;它使用Transformer神经网络架构&#xff0c;训练数据来自包括维基百科&#xff0c;以及真实对话在内的庞大语料库。2023年1月30日消息称&#xff0c;中国搜索巨…

数据分析-统计基础

day1&#xff1a;集中趋势&#xff0c;离散测度&#xff0c;均值&#xff0c;中位数&#xff0c;众数&#xff0c;方差等。点估计&#xff0c;区间估计等相关的知识 现代数据分析&#xff1a;把数据放到一个数据空间中&#xff0c;通过这个空间的个各种形变与分析而挖掘除数据…

Android RenderScript 浅谈

前言 RenderScript是一个Google出品的&#xff0c;在Android平台上的并行计算框架&#xff0c;官方的简介是说RenderScript运行时可在设备上提供的多个处理器&#xff08;如多核 CPU 和 GPU&#xff09;间并行调度工作。在日常Android开发中&#xff0c;RenderScript主要用于图…

数据库:Redis哨兵及cluster集群部署

一、redis数据库哨兵模式 目录 一、redis数据库哨兵模式 1、什么是哨兵模式 2、哨兵的作用 3、哨兵结构组成 4、哨兵故障转移机制 5、哨兵工作、切换原理 6、哨兵主节点选举原则 7、哨兵模式部署 二、redis数据库cluster集群 1、cluster集群优点、数据存储及同步方式…

Chapter2 : SpringBoot配置

尚硅谷SpringBoot顶尖教程 1. 全局配置文件 SpringBoot使用一个全局的配置文件 application.properties 或者 application.yml &#xff0c;该配置文件放在src/main/resources目录或者类路径/config目录下面&#xff0c; 可以用来修改SpringBoot自动配置的默认值。 yml是YA…

wxml模板,wxss模版,全局配置,页面配置,网络数据请求

WXML 模板语法 1、数据绑定 1.1、数据绑定的基本原则 ① 在 data 中定义数据② 在 WXML 中使用数据 1.2、在 data 中定义页面的数据 在页面对应的 .js 文件中&#xff0c;把数据定义到 data 对象中即可&#xff1a; Page({data: {//字符串数据info:init data}, });1.3、M…

《Kubernetes部署篇:Ubuntu20.04基于containerd部署kubernetes1.24.12单master集群》

一、架构图 如下图所示&#xff1a; 二、环境信息 主机名K8S版本系统版本内核版本IP地址备注k8s-master-621.24.12Ubuntu 20.04.5 LTS5.15.0-69-generic192.168.1.62master节点k8s-worker-631.24.12Ubuntu 20.04.5 LTS5.15.0-69-generic192.168.1.63worker节点k8s-worker-641…

二、SDN-计算机网络专项(2)

1、编码 编码形式&#xff1a; 以太网使用的编码方式为曼彻斯特编码。 2、信息传输速率 &#xff08;1&#xff09;香农定理 带宽为W&#xff08;Hz&#xff09;且有高斯噪音干扰&#xff08;信噪比S/N&#xff09;的信道极限信息传输速率为&#xff1a; 还有&#xff0c;信噪…

Linux_红帽8学习笔记分享_2

Linux_红帽8学习笔记分享_2 文章目录Linux_红帽8学习笔记分享_21.远程控制servera和serverb1.1开启多标签页1.2启用servera和serverb1.3连接servera和serverb2.退出子虚拟机并关机2.1退出子虚拟机2.2关闭虚拟机2.3重启虚拟机3.Linux在使用过程中遇到的基础操作3.1退出至登录界面…

Spring销毁的几种实现

有这3种方法&#xff0c;但是程序执行完成并没有打印出来。一定要手动close.手动执行后会调用如下逻辑&#xff1a;org.springframework.context.support.AbstractApplicationContext#doCloseorg.springframework.context.support.AbstractApplicationContext#destroyBeansorg.…

点亮孙武不夜城 拉响惠民经济新引擎

凡战者&#xff0c;以奇制胜。这次的招商很特别—孙武不夜城招商项目正式启动&#xff01;      无租金、无投资、无风险合伙人制。      现诚邀广大商家合作&#xff0c;相聚不夜城。同此道者&#xff0c;合大志&#xff0c;鸣鼓纳征&#xff0c;亮惠民夜生活&#xf…

一位年薪35W的测试被开除,回怼的一番话,令人沉思

一位年薪35W测试工程师被开除回怼道&#xff1a;“反正我有技术&#xff0c;在哪不一样” 一技傍身&#xff0c;万事不愁&#xff0c;当我们掌握了一技之长后&#xff0c;在职场上说话就硬气了许多&#xff0c;不用担心被炒&#xff0c;反过来还可以炒了老板&#xff0c;这一点…

如何防御恶意流量攻击(CC、DDoS)?

随之网络安全的地位不断提高&#xff0c;越来越多的攻击得以解决&#xff0c;但随之而来的也是新的攻击在变着花样地出现&#xff0c;就好比DDoS攻击与CC攻击就是这些年较为常见的攻击手段&#xff0c;这两种攻击分别针对网站的应用层和网络层。 我们网站运维人员一定要做好功课…

Vue--构建亚马逊多账号的后台数据展示

效果展示&#xff1a; 根据自创的账号个数来创建对应的表格个数 移动到对应商品时展示该商品的日出售变化情况 设计思路&#xff1a; 获取亚马逊平台个人账号数据传入自定义组件<WeekTable> <WeekTable>组件获取到数据后&#xff0c;就会重载DOM元素内容。我们在组…

Ae 入门系列之七:文本动画

Ae 提供了多种制作文本动画的方法。既可以在时间轴面板上基于基本属性手动添加关键帧&#xff0c;还可以使用专门的文本动画制作工具&#xff0c;或者直接使用动画预设。有关文本图层的基础知识请参阅&#xff1a;《Ae&#xff1a;文本图层操作基础》提示&#xff1a;文本动画的…

员工培训Employee Training

前言 加油 原文 员工培训常用会话 ❶ When is our training session? 我们的课程培训在什么时候? ❷ You shouldn’t be absent at training sessions. 你不能缺席课程培训。 ❸ You should follow these rules and regulations. 你应该遵守这些规章制度。 ❺ The staff…

ROS实践11 自定义头文件并调用

文章目录运行环境&#xff1a;思路&#xff1a;1.1 编写头文件1.2 includepath添加头文件路径1.3 编写可执行文件1.4 配置文件1.5 编译运行运行环境&#xff1a; ubuntu20.04 noetic 宏基暗影骑士笔记本 思路&#xff1a; 类和函数&#xff1a; 头文件 声明 可执行文件 定义…

测试行业3年经验,从大厂裸辞后,面试阿里、字节全都一面挂,被面试官说我的水平还不如应届生

测试员可以先在大厂镀金&#xff0c;以后去中小厂毫无压力&#xff0c;基本不会被卡&#xff0c;事实果真如此吗&#xff1f;但是在我身上却是给了我很大一巴掌... 所谓大厂镀金只是不卡简历而已&#xff0c;如果面试答得稀烂&#xff0c;人家根本不会要你。况且要不是大厂出来…

Leetcode6365. 最少翻转操作数题解

题目在此&#xff1a;力扣 首先&#xff0c;先祝福自己本周周赛过了三题。耶耶耶耶耶耶&#xff01;虽然第一题因为脑子不好使想了半天&#xff0c;还WA了一次。衷心祈祷今年力扣能上1800分&#xff01;&#xff01;&#xff01; 这道题&#xff0c;我看了一些通过人数&#x…