文件操作3

随机读写数据文件

一、随机读写原理

在我们写数据时,有一个光标不断的在随着新写入的数据往后移动;

而读数据时,也有一个看不见光标,随着已经读完的数据,往后移动

这里的文件读写位置标记——可以想象成图形界面里的光标,读写时自动移动

也类似于看电影,听音乐时的进度条

而随机读写就是随机跳跃移动光标,或是进度滚动条

二、随机读写函数fseek说明,fseek的简单应用

//把D盘目录下的1.txt文件(D:\\1.txt)的内容(前提有该文件且有数据),读2次并输出到屏幕
    

可以看到上图第一遍fread的返回值len1为15,不是100,因为fread的返回值是实际读取的数据数量

而第二个为0,并没有读进来,这是因为——

例如读下图中的一串数据,第一遍顺序读到末尾,光标显示在末尾

读完了第二次重新从光标的这个位置再去读,

此时光标已经在数据的最末尾了,那么再去读已经没有数据了

所以在第二次读len2之前,我们要将文件标记位置,重新移动到文件开头——fseek

fseek有3个参数

1.文件位置指针fr

2.字节距离这个参照点的位置

3.初始化的位置,也叫参照点,参照物

它提供了3个参照点,(参照点在哪,光标在哪)

第一个是文件标记位置,光标的当前位置;第二个是文件尾;第三个是文件头

之后通过第二个参数将光标往左或是往右偏移多少个字节

现在光标就能到达你想达到的位置,即随机函数

例如要到达文件开头,那就是偏移量为0,以文件开头为参照点

fseek(fr,0,SEEK_SET)

要是以第一遍读完后的文件尾,为当前位置,作参照点,

那么往左移为负数,往右移为正数

从尾回到头就是-len1

三、读取指定学生信息

//1打开2读3输出4跳过

//再磁盘文件上存有10个学生的数据,将第1,3,5,7,9个学生数据输入计算机,并在屏幕上显示出来

//学生结构体
typedef struct Student
{
	char name[20];//姓名
	int num;//学号
	int age;//年龄
	char addr[100];//地址
} Student;

//1打开2读3输出4跳过
int main()
{
	FILE* fr = fopen("1.txt", "rb");
	if (fr == NULL)
	{
		printf("文件打开失败\n");
		return -1;
	}
	Student stu;//读到stu里面
	int len;
	for (int i = 0; i < 3; i++)//读3个学生的信息
	{
		len=fread(&stu, sizeof(Student), 1, fr);
		if (len < 1)//要信息了求读一次却没有读到1,说明文件已经没有
		{
			printf("文件结束了\n");
			break;
		}
		printf("%s %d %d %s\n", stu.name, stu.num, stu.age, stu.addr);
		//跳过偶数位置
		fseek(fr,sizeof(Student), SEEK_CUR);//跳过一个学生大小的字节数
	}
	fclose(fr);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值