【C语言】fseek、ftell以及rewind函数(随机文件读写)
创始人
2024-11-12 07:08:55
0次

文章目录

  • 前言
  • 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; } 

相关内容

热门资讯

实测交流透视挂!宝玛大厅ai智... 实测交流透视挂!宝玛大厅ai智能透视挂教程,宝玛大厅破解软件经验(本来有挂辅助)1、每一步都需要思考...
总算了解辅助器!朱雀吴江三缺一... 总算了解辅助器!朱雀吴江三缺一ai智能透视辅助挂技巧,朱雀吴江三缺一好像是有挂(有辅助挂细节)朱雀吴...
今日公布透视!九五至尊大厅ai... 今日公布透视!九五至尊大厅ai智能透视插件,九五至尊大厅有没有透视挂窍门(切实有挂技术)1、在九五至...
玩家必看科普开挂!聚闲麻将ai... 玩家必看科普开挂!聚闲麻将ai智能透视辅助挂软件,聚闲麻将总是真的有挂(有辅助挂方式)聚闲麻将能透视...
据报道开挂!旅游娱乐ai智能开... 据报道开挂!旅游娱乐ai智能开挂工具,旅游娱乐辅助工具演示(一直有挂教学)1、全新机制【旅游娱乐ai...
一分钟揭秘开挂!决胜朋来麻将a... 一分钟揭秘开挂!决胜朋来麻将ai智能透视辅助挂教程,决胜朋来麻将真是真的是有挂(有辅助挂总结)1、首...
如何分辨真伪透视!红牛ai智能... 如何分辨真伪透视!红牛ai智能透视攻略,红牛是不是有挂经验(真是有挂技术)1、操作简单,无需红牛手机...
2分钟细说辅助器!江湖大庆麻将... 2分钟细说辅助器!江湖大庆麻将ai智能透视辅助挂攻略,江湖大庆麻将竟然是真的有挂(有辅助挂头条)1、...
总算清楚透视挂!老夫子厅ai智... 总算清楚透视挂!老夫子厅ai智能透视挂技巧,老夫子厅怎么开挂课程(好像发现有挂)老夫子厅破解侠是真的...
解密关于辅助!菜鸟麻将ai智能... 解密关于辅助!菜鸟麻将ai智能透视辅助挂脚本,菜鸟麻将总是存在有挂(有辅助挂存在)1、用户打开应用后...