C语言:文件操作(三)

目录

前言

5、文章的随机读写

[5.1 fseek](#5.1 fseek)

[5.2 ftell](#5.2 ftell)

[5.3 rewind](#5.3 rewind)

结语


前言

本篇文章继续讲解文件操作,讲解文件的随机读写,主要有三个函数:fseek;ftell;rewind。

前面讲解的函数都是对文件内容进行顺序读写,例如:一个文件中存放着"abcd"字符,首先用fgetc读出的是a的地址,再用一次fgetc读出的就是b的地址,以此类推,它都是按着顺序去读的。如果我们想要按照自己的想法去读写文件的话,就要用到文件随机读写的函数。

5、文章的随机读写

5.1 fseek

fseek是根据文件指针位置和偏移量来定位新的指针位置的函数。它有三个参数,第一个是要操作文件的文件指针,第二个是偏移量,第三个参数是当前文件指针的位置。

第三个参数具体讲一下,它有三个取值:

第一个SEEK_SET表示文件的起始位置;第二个SEEK_CUR表示当前文件指针的位置;第三个SEEK_END表示文件的末尾位置。

举个例子:

cpp 复制代码
#include<stdio.h>


int main()
{
	FILE* pf = fopen("test.txt", "w");
	while (NULL == pf)
	{
		perror("");
		return 1;
	}

	fprintf(pf, "%s", "abcdef");

	fclose(pf);
	pf = NULL;

	pf = fopen("test.txt", "r");
	while (NULL == pf)
	{
		perror("");
		return 1;
	}
	//定位文件位置
	fseek(pf, 2, SEEK_SET);
	int ch = fgetc(pf);
	printf("%c\n", ch);

	fseek(pf, 2, SEEK_CUR);
	ch = fgetc(pf);
	printf("%c\n", ch);
	
	fclose(pf);
	pf = NULL;
	return 0;
}

此代码前面先创建了一个文件"test.txt",放入"abcdef",然后通过fseek去定位我们想要的内容进行输出,可以看到,第一次用fseek的时候,是将pf定位起始位置向右两个偏移量的位置,所以第一次输出为c,此次调用后,由于fgetc特性,pf将指向文件第三个字符的位置,也就是d。下一次我们调用fseek用的是"SEEK_CUR",是将pf定位到它原本位置后两个偏移量的位置,因此输出为"f"。

看效果:

fseek的用法就是如此,我们可以通过fseek去访问我们想要的位置的内容。

5.2 ftell

ftell函数是用来测量文件指针距离文件起始位置的偏移量的,这个很好理解。它的参数就是文件指针。

假如有一个文件的内容是"abcdef",我用一个文件指针 pf 指向"c"的话,我们调用ftell(pf),得到的结果就是2,因为c在这个文件里离起始位置的偏移量是2。

这个函数的作用就是在我们不清楚目前文件指针的偏移量的时候,可以调用它来确定,从而更加精确地去操作文件。

5.3 rewind

这个函数地作用就是让指针的位置回到文件起始位置。它的参数就是文件指针。

结语

关于文章的随机读写,就讲到这,希望对你有所帮助,接下来还会讲解文本和二进制文件。

相关推荐
Nuyoah11klay18 分钟前
华清远见25072班C语言学习day11
c语言·指针·回调函数
CC__xy20 分钟前
04 类型别名type + 检测数据类型(typeof+instanceof) + 空安全+剩余和展开(运算符 ...)简单类型和复杂类型 + 模块化
开发语言·javascript·harmonyos·鸿蒙
萤丰信息31 分钟前
技术赋能安全:智慧工地构建城市建设新防线
java·大数据·开发语言·人工智能·智慧城市·智慧工地
小张的博客之旅38 分钟前
宁波市第八届网络安全大赛初赛(REVERSE-Writeup)
学习·网络安全·reverse
Pocker_Spades_A1 小时前
飞算JavaAI家庭记账系统:从收支记录到财务分析的全流程管理方案
java·开发语言
墨雨听阁2 小时前
8.18网络编程——基于UDP的TFTP文件传输客户端
网络·网络协议·学习·udp
小晶晶京京2 小时前
day35-负载均衡
运维·网络·网络协议·学习·负载均衡
CHEN5_022 小时前
【Java基础常见辨析】重载与重写,深拷贝与浅拷贝,抽象类与普通类
java·开发语言
Despacito0o2 小时前
C语言基础:变量与进制详解
java·c语言·开发语言
nightunderblackcat3 小时前
进阶向:人物关系三元组,解锁人物关系网络的钥匙
开发语言·python·开源·php