C语言 文件操作内容学习成果

一.文件类型

1文件

磁盘上的⽂件是⽂件。
但是在程序设计中,我们⼀般谈的⽂件有两种:程序⽂件、数据⽂件(从⽂件功能的⻆度来分类
的)。

1.1文件有分为程序文件和数据文件

程序⽂件
包括源程序⽂件(后缀为.c),⽬标⽂件(windows环境后缀为.obj),可执⾏程序(windows 环境后缀为.exe)。
数据文件
⽂件的内容不⼀定是程序,⽽是程序运⾏时读写的数据,⽐如程序运⾏需要从中读取数据的⽂件,或 者输出内容的⽂件

1.2数据⽂件还有二进制文件和文本文件之分

二进制文件是之内存的存储方式为二进制方式,不加以转换直接呈现到我们面前的文件

文本文件是二进制存储方式转换成ASCII表符号呈现到我们面前的文件(我们可以看到懂的);

二.文件的打开与关闭

为了方便程序员的打开和关闭文件,程序员不可能把所有的外接设备都了解,于是就有了“流”的出现。

那是因为C语⾔程序在启动的时候,默认打开了3个流:
stdin - 标准输⼊流,在⼤多数的环境中从键盘输⼊,scanf函数就是从标准输⼊流中读取数据。
stdout - 标准输出流,⼤多数的环境中输出⾄显⽰器界⾯,printf函数就是将信息输出到标准输出
流中。
stderr - 标准错误流,⼤多数环境中输出到显⽰器界⾯。
这是默认打开了这三个流,我们使⽤scanf、printf等函数就可以直接进⾏输⼊输出操作的。
stdin、stdout、stderr 三个流的类型是: FILE* ,通常称为⽂件指针。

1.文件的打开与关闭要用到文件指针,

// 打开⽂件
FILE * fopen ( const char * filename, const char * mode );
// 关闭⽂件
int fclose ( FILE * stream );
举例子:
文件的打开
FILE* pf = fopen("date.txt",“r”);    -->date.txt为文件的开辟,以读的方式打开
文件的关闭
fclose(pf);                              -->文件的关闭
pf = NULL;

1.1mode表⽰⽂件的打开模式,下⾯都是⽂件的打开模式:

2.文件的读写方式(顺序读写)

2.1每一个函数的实例

//int main()
//{
//	FILE* pf = fopen("date.txt","r");
//	if (pf == NULL)
//	{
//		printf("not");
//		return 1;
//	}
//	//fputc(99,pf);
//	printf("%d",fgetc(pf));
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//int main()
//{
//	char arr[20] = "xxxxxxxxxxxxxxx";
//	FILE* pf = fopen("date1.txt", "r");
//	if (pf == NULL)
//	{
//		printf("not");
//		return 1;
//	}
//	//fputs(arr,pf);
//	fgets(arr,4,pf);
//	for (int i = 0; i < 20; i++)
//	{
//	 printf("%c",arr[i]);
//	}
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}
// 
//struct p
//{
//	char num[20];
//	int age;
//	float h;
//};
//int main()
//{
//	struct p a = {0};
//	FILE* pf = fopen("date1.txt","r");
//	if (pf == NULL)
//	{
//		printf("not");
//	}
//	
//	/*fprintf(pf,"%s %d %f",a.num,a.age,a.h);*/
//
//	/*fscanf(pf,"%s %d %f",a.num,&(a.age),&(a.h));
//	printf("%s %d %f", a.num, a.age, a.h);*/
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

//struct p
//{
//	char num[20];
//	int age;
//	float h;
//};
//int main()
//{
//	struct p a[] = {0};
//	
//	FILE* pf = fopen("date2.txt", "rb");
//	if (pf == NULL)
//	{
//		printf("not");
//		fclose(pf);
//	}
//	/*fwrite(&a, 1, sizeof(a), pf);*/
//	fread(&a,1,sizeof(a),pf);
//	printf("%s %d %.1f",a->num,a->age,a->h);
//
//	fclose(pf);
//	pf = NULL;
//	return 0;
//
//}

三.文件的随机读写

1.根据⽂件指针的位置和偏移量来定位⽂件指针。fseek 

int fseek ( FILE * stream, long int offset, int origin );
实战例子
int main()
{
	FILE* pf = fopen("date.txt","r");
	if (pf == NULL)
	{
		printf("iii");
	}
	//printf("%c\n", fgetc(pf));
	//printf("%c\n", fgetc(pf));
	

	fseek(pf,5,SEEK_SET);
	printf("%c\n", fgetc(pf));

	fclose(pf);
	pf = NULL;

	return 0;
}

2.返回⽂件指针相对于起始位置的偏移量  ftel

  long int ftell ( FILE * stream );
实战例子
int main()
{
	FILE* pf = fopen("date.txt", "r");
	if (pf == NULL)
	{
		printf("iii");
	}
	//printf("%c\n", fgetc(pf));
	//printf("%c\n", fgetc(pf));


	fseek(pf, 5, SEEK_SET);
	int a = ftell(pf);
	printf("%c\n", fgetc(pf));
	printf("%d",a);
	fclose(pf);
	pf = NULL;

	return 0;
}

3.让⽂件指针的位置回到⽂件的起始位置  rewind

void rewind ( FILE * stream );

实战例子

int main()
{
	FILE* pf = fopen("date.txt", "r");
	if (pf == NULL)
	{
		printf("iii");
	}
	//printf("%c\n", fgetc(pf));
	//printf("%c\n", fgetc(pf));


	fseek(pf, 5, SEEK_SET);
	printf("%c\n", fgetc(pf));
	int a = ftell(pf);
	rewind(pf);
	printf("%c\n", fgetc(pf));
	printf("%d", a);
	fclose(pf);
	pf = NULL;

	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值