C语言的文件操作

前言:我们知道一个程序在运行时,数据是存储在内存中的,当退出程序后,数据也就销毁了,下次运行程序时又要重新输入数据,如果我们要达到程序退出时,数据依然存在,直到我们自己选择删除数据时数据才销毁,该如何做到呢?这就涉及到如何把数据写入电脑的硬盘中,以此来达到我们想要的效果,也达到了数据的持久化.

FILE*

首先我们要了解这个FILE指针,它是一个文件指针是用来创建一个FILE*的变量来访问一个文件的,一般我们通过这个文件指针来找到与它关联的文件.
如何打开和关闭一个文件呢,ANSIC 规定使用fopen函数来打开文件,用fclose函数来关闭文件.
## fopen函数原型
在这里插入图片描述
## fclose函数原型
在这里插入图片描述
当我们知道了用来打开文件的函数后还要知道打开文件的方式,下图将一一介绍:
在这里插入图片描述

#include<stdio.h>
int main()
{
	FILE* pf;                   //创建一个文件指针类型变量
	pf = fopen("li.txt", "w");	//打开文件,如果不存在则创建一个新的
	if (pf == NULL)             //判断fopen的返回值是否为空指针,失败会返回NULL指针
	{
		perror("fopen:");
		return 1;
	}
	fclose(pf);                //关闭文件
	pf = NULL;                 //指针置为空
	return 0;
}

这里程序运行后,此时我们的路径下就会创建出一个新的文件.
在这里插入图片描述

文件的顺序读写

文件的顺序读写函数以及功能:
在这里插入图片描述

#include<stdio.h>
int main()
{
	FILE* pf = fopen("li.txt", "w");     //以写的方式打开文件
	if (pf == NULL)                      
	{
		perror("fopen:");
		return 1;
	}
	char ch = 'a';
	for (ch = 'a'; ch <= 'z'; ch++)   
	{
		fputc(ch, pf);                //给这个文件内录入信息字符'a'~'z'
	}
	fclose(pf);                       //关闭文件
	pf = NULL;
	return 0;
}

文件的随机读写

1.fseek函数原型
在这里插入图片描述

这个函数是根据文件指针的位置和对于起始位置的偏移量来定位文件指针.

#include<stdio.h>
int main()
{
	FILE* pf = fopen("li.txt", "r");   //因为我们这个文件中放的是字符'a'~'z'
	if (pf == NULL)
	{
		perror("fopen:");
		return 1;
	}
	int ch = fgetc(pf);               //所以这里是a
	printf("%c\n", ch);

	fseek(pf, 3, SEEK_SET);           //从起始位置向后偏移3,指向d

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

    ch = fgetc(pf);                  //上一次指针已经指向了d,向后走这次指向的是e
	printf("%c\n", ch);

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

验证:
在这里插入图片描述
2.ftell函数原型
在这里插入图片描述
这个函数的作用是计算出此时这个文件指针对于起始位置的偏移量是多少,并返回它.

#include<stdio.h>
int main()
{
	FILE* pf = fopen("li.txt", "r");   //因为我们这个文件中放的是字符'a'~'z'
	if (pf == NULL)
	{
		perror("fopen:");
		return 1;
	}
	int ch = fgetc(pf);               //所以这里是a
	printf("%c\n", ch);

	fseek(pf, 3, SEEK_SET);           //从起始位置向后偏移3,指向d

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

    ch = fgetc(pf);                  //上一次指针已经指向了d,向后走这次指向的是e
	printf("%c\n", ch);

	long flag = ftell(pf);           //计算偏移量
	printf("对于起始位置的偏移量是:%ld\n", flag);//偏移量为5

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

验证:
在这里插入图片描述
3.rewind函数原型
在这里插入图片描述
这个函数的作用是让文件指针的位置回到起始位置

#include<stdio.h>
int main()
{
	FILE* pf = fopen("li.txt", "r");   //因为我们这个文件中放的是字符'a'~'z'
	if (pf == NULL)
	{
		perror("fopen:");
		return 1;
	}
	fseek(pf, 3, SEEK_SET);           //从起始位置向后偏移3
	long flag = ftell(pf);           //计算偏移量
	printf("对于起始位置的偏移量是:%ld\n", flag);

	rewind(pf);                      //使用rewind函数使文件指针回到起始位置
	
	flag = ftell(pf);                //再计算一次偏移量大小
	printf("对于起始位置的偏移量是:%ld\n", flag);//此时这里是0

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

验证:
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JuLiJuLi.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值