【C语言】fseek、ftell以及rewind函数(随机文件读写)

news2024/12/24 2:42:17

文章目录

  • 前言
  • 1. fseek
    • 1.1 fseek函数原型
    • 1.2 fseek函数的形式参数
    • 1.3 fseek实例演示
  • 2. ftell
    • 2.1 ftell函数原型
    • 2.2 ftell函数的实例演示
  • 3. rewind
    • 3.1 rewind函数原型
    • 3.2 rewind函数实例演示

前言

在之前,我讲过文件的顺序读写。但是我们可不可以随机读写文件呢?答案是当然可以的,只要我们合理的控制文件指针的位置(光标),就能够读取到我们想要读取的数据。

C语言给我们提供了随机读写文件的函数,只要我们能够合理的运用它们,就能够实现我们要达到的效果。

那么,今天我们就来一起探讨一下随机文件读取函数!!!

1. fseek

fseek函数的作用:重新定位光标的位置。

一般来说,我们打开一个文本文件,文件的光标位置都会处在文件内容最开始的位置,也就是如下的样子:
光标
那我们运用fseek函数,就能够按照我们的意愿随意改变光标出现的位置,然后在开始读取文件的内容。

1.1 fseek函数原型

fseek

fseek函数的形参
fseek函数返回值
如果fseek函数执行成功,则返回0 。否则返回一个非0值。

1.2 fseek函数的形式参数

这里我要重点讲解一下fseek函数的形式参数。

形参名作用
steam文件指针变量
offset光标的偏移量
origin设置光标的起始位置

看到offset这个变量名时,不知道大家有没有想起,我在结构体内存对齐的那边文章中用了一个offsetof函数检测了结构体成员相对于起始位置的偏移量。

而offset则是光标位置相对于设置光标起始位置之后的偏移量。

那对于origin变量,C编译器给我们提供了3个宏,它们分别是:

作用
SEEK_SET将光标重置到文件开头的位置 (比较常用)
SEEK_CUR将光标重置到当前文件内容的最末尾位置 (比较常用)
SEEK_END将光标重置到文件结束标志的后面

1.3 fseek实例演示

//fseek函数的实例演示
//现在我有一个文件test4.txt,内容为26个英文字母。现在我只想读取从字母m之后的所有字母,并打印到屏幕上。
int main()
{
	char ch = 0;
	int count = 0;

	FILE* pf = fopen("test4.txt","r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	
	while (ch = fgetc(pf))
	{
		if (ch == 'm')
		{
			break;
		}
		count++;
	}

	fseek(pf,count,SEEK_SET);

	while ((ch = fgetc(pf)) != EOF)
	{
		fprintf(stdout,"%c",ch);
	}

	fclose(pf);
	pf = NULL;

	return 0;
}

文件内容

2. ftell

ftell函数的作用:告诉我们目前光标的位置,从0开始。

2.1 ftell函数原型

ftell函数原型
ftell函数的返回值
ftell函数如果执行失败,则返回-1 。

2.2 ftell函数的实例演示

int main()
{
	char ch = 0;

	FILE* fp = fopen("test4.txt","r");

	if (fp== NULL)
	{
		perror("fopen");
		return 1;
	}

	ch = fgetc(fp);
	printf("%d\n", ftell(fp));

	ch = fgetc(fp);
	printf("%d\n", ftell(fp));
	
	fclose(fp);
	fp = NULL;

	return 0;
	
}

3. rewind

rewind函数的作用:将光标中重置到文件最开头的位置,也就是ftell读取值为0的地方。

3.1 rewind函数原型

rewind函数原型

3.2 rewind函数实例演示

//rewind函数
int main()
{
	char ch = 0;

	FILE* fp = fopen("test4.txt","r");

	if (fp== NULL)
	{
		perror("fopen");
		return 1;
	}

	ch = fgetc(fp);
	printf("%c\n",ch);
	
	printf("%d\n", ftell(fp));

	rewind(fp);
	ch = fgetc(fp);
	printf("%c\n", ch);

	printf("%d\n", ftell(fp));

	fclose(fp);
	fp = NULL;

	return 0;
}

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

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

相关文章

PCL从理解到应用【09】 点云特征 | 关键点提取 | 方法汇总

前言 在PCL中,有多种方法和函数可以用来提取点云特征,本文介绍关键点提取。 提取点云关键点,本文介绍的方法包括:SIFT、Harris、NARF、ISS和SUSAN。 Harris 提取点云关键点,效果如下图所示: 白色点是原始…

MATLAB预测模型(2)

一、前言 在MATLAB中,进行线性回归、非线性回归以及统计回归预测可以通过多种方法实现,包括使用内置函数和自定义函数。下面,我将分别给出线性回归、非线性回归和基于统计回归进行预测的基本示例代码。 二、实现 1. 线性回归 MATLAB中的poly…

机器人主板维修|ABB机械手主板元器件故障

【ABB机器人电路板故障原因诊断】 针对上述故障现象,我们需要对ABB机器人IO板进行详细的故障诊断。以下是一些可能的故障原因: 1. 元器件老化或损坏:ABB机械手安全面板上的元器件在长期使用过程中可能出现老化、损坏或接触不良等问题&#xf…

PyCharm运行Python的Flask项目时,愚蠢的执行了默认Flask框架默认配置处理

一:问题描述 因为上半年开始学习完python后,开始转人工智能方向的工作内容,所以这半年几乎在攻关python以及人工智能方向的技能,但是我有喜欢用Java的一些开发的爽点。 最近整Flask的框架时发现了一个问题,我就在Fla…

【数据结构算法经典题目刨析(c语言)】反转链表(图文详解)

💓 博客主页:C-SDN花园GGbond ⏩ 文章专栏:数据结构经典题目刨析(c语言) 目录 一、题目描述 二、思路分析 三、代码实现 一、题目描述: 二、思路分析 : 通过三个指针n1,n2,n3来实现链表的反转 1.首先初始化 n1为…

IO流相关

1. IO概述 Java中I/O操作主要是指使用java.io包下的内容,进行输入、输出操作。输入也叫做读取数据,输出也叫做作写出数据。 1.1 IO的分类 根据数据的流向分为:输入流和输出流。 输入流 :把数据从其他设备上读取到内存中的流。 …

力扣SQL50 好友申请 II :谁有最多的好友 UNION ALL

Problem: 602. 好友申请 II :谁有最多的好友 👨‍🏫 参考题解 功能概述: 该查询统计 RequestAccepted 表中用户(作为请求方或接受方)出现的总次数,并找出出现次数最多的用户ID。 执行步骤&a…

PHP语言的学习(ctfshow中web入门web93~web104)

PHP语言基础知识(超详细)_php开发知识-CSDN博客 PHP特性之CTF中常见的PHP绕过-CSDN博客 浅谈PHP代码执行中出现过滤限制的绕过执行方法_php过滤绕过-CSDN博客 php代码审计(适合小白入门)_php审计入门-CSDN博客 什么是PHP? PHP 是一种脚本…

File 类练习

练习1:在当前模块下的aaa文件夹中创建一个a.txt文件。 分析:当前模块下是没有aaa文件夹的,这里我是手动在当前模块下创建了aaa文件夹,然后在指定a.txt的路径,再createNewFile()的。 public class File1 {public stat…

一键重装系统哪个软件好用_2024年一键重装系统工具排行榜

一键重装系统哪个软件好?现在市面上重装软件五花八门,有些网友不知道哪些好用,下面小编就为大家整理几款不错的电脑一键重新系统软件供大家选择,现整理2024年一键重装系统软件排行。 一键重装系统哪个软件好用? 一键重…

如何系统地自学Python?AI的回答让你少走三年弯路!

系统地自学Python是一个循序渐进的过程&#xff0c;需要掌握基础知识、进阶技能以及实践项目。以下是一个详细的自学Python的指南&#xff1a; 一、学习准备<末尾有AI整理的学习资料、电子书籍、实战项目> 了解Python&#xff1a; Python是一种流行的编程语言&#xff…

入门 PyQt6 看过来(案例)22~ 图表案例

​ ​ def showPie(self):"""绘制饼状图"""# &#xff08;1&#xff09;创建图表和视图chart QChart()chart.setTitle(中国高等教育普及率)chart.legend().setAlignment(Qt.AlignmentFlag.AlignLeft)chartView QChartView(self) # 必须有sel…

CookieMaker工作室合作开发C++项目十一:拟态病毒

&#xff08;注&#xff1a;本文章使用了“无标题技术”&#xff09; 一天&#xff0c;我和几个同事&#xff0c;平台出了点BUG&#xff0c;居然给我刷出了千年杀&#xff0c;同事看得瑕疵欲裂&#xff0c;发誓要将我挫骨扬灰—— &#xff08;游戏入口&#xff1a;和平精英31.…

iOS技术之安装nvmnode完整步骤

1.前提 首先电脑里得有brew、git、vscode这些工具, 当然了要用nvm&node肯定是需要这些基本开发工具 2.删除node环境 如果mac里没有安装过node、npm可以无视直接去 3 安装nvm。 为了保证安装nvm能够成功管理node&#xff0c;必须把电脑里之前安装的node全部清理&#xf…

微信小程序css中配置了文字超出一行或两行则显示省略号对纯数字或纯字母或小数点无效的解决办法

配置了文字超出一行或两行则显示省略号对纯数字或纯字母或小数点无效的解决办法 overflow_title{display: -webkit-box;-webkit-line-clamp: 1;-webkit-box-orient: vertical;overflow: hidden;text-overflow: ellipsis; }只需要加上这两行css代码即可 word-break:break-all;…

Spring泛型的依赖注入

泛型依赖注入就是允许我们在使用spring进行依赖注入的同时&#xff0c;利用泛型的优点对代码进行精简&#xff0c;将可重复使用的代码全部放到一个类之中&#xff0c;方便以后的维护和修改。同时在不增加代码的情况下增加代码的复用性。

Go切片深入学习

Go切片专项学习 go切片扩容机制 go1.18 之前&#xff1a; 1.如果期望容量大于当前容量的两倍就会使用期望容量&#xff1b; 2.如果当前切片的长度小于 1024 就会将容量翻倍&#xff1b; 3.如果当前切片的长度大于 1024 就会每次增加 25% 的容量&#xff0c;直到新容量大于期…

基于AI大模型的数据治理

— 01— 什么是大模型&#xff1f; 大模型是指具有数千万甚至数亿参数的深度学习模型。近年来&#xff0c;随着计算机技术和大数据的快速发展&#xff0c;深度学习在各个领域取得了显著的成果&#xff0c;如自然语言处理&#xff0c;图片生成&#xff0c;工业数字化等。为了提…

如何快速下载huggingface大模型

Stackoverflow 上有个AI开发入门的最常见问题 How to download model from huggingface?&#xff0c;回答五花八门&#xff0c;可见下载 huggingface 模型的方法是十分多样的。 其实网络快、稳的话&#xff0c;随便哪种方法都挺好&#xff0c;然而结合国内的网络环境&#xf…

如何给微信小程序商城增加直播购物功能

作者&#xff1a;阿龙 当前&#xff0c;随着抖音、快手、淘宝、拼多多等平台直播卖货的崛起&#xff0c;消费者已经习惯了在直播间购物模式&#xff0c;它可以实现卖家和用户之间的互动&#xff0c;实时解答用户的疑问&#xff0c;让用户可以放心下单购买。东方甄选、董宇辉、李…