文件操作常用函数—fputc,fgetc,fprintf,fscanf,fwrite,fread

一.什么是文件

日常生活中我们常说的文件通常指的是磁盘中文件。从程序设计的角度来看,我们可将程序分为两类,一是程序文件,二是数据文件

程序文件
包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为exe)等文件
数据文件
所有与程序进行数据交互的文件都可以被称为数据文件,那我D盘下的一个ppt是不死数据文件呢?如果你要从它里面读取数据到内存中,或者将内存中的数据写入它里面,那么这个ppt就可以称为数据文件。本文讲述的文件操作值得就是数据文件

二.使用文件的三个步骤

使用一个可以分为三步:
1.打开文件
2.读(输入)或写(输出)数据
3. 关闭文件

关于第二步的输入和输出怎么理解。可以给出这样的一张图来解释
在这里插入图片描述
所谓的输入和输出都是针对程序或者内存而言的

三.文件的打开和关闭

//打开文件
FILE * fopen ( const char * filename, const char * mode );
//关闭文件
int fclose ( FILE * stream )

这里的mode是文件的打开方式,包含以下几种

文件使用方式含义如果指定文件不存在
“r”(只读)为了输入数据,打开一个已经存在的文本文件出错
“w”(只写)为了输出数据,打开一个文本文件建立一个新的文件
“a”(追加)向文本文件尾添加数据建立一个新的文件
“rb”(只读)为了输入数据,打开一个二进制文件出错
“wb”(只写)为了输出数据,打开一个二进制文件建立一个新的文件
“ab”(追加)向一个二进制文件尾添加数据出错
“r+”(读写)为了读和写,打开一个文本文件出错
“w+”(读写)为了读和写,建议一个新的文件建立一个新的文件
“a+”(读写)打开一个文件,在文件尾进行读写建立一个新的文件
“rb+”(读写)为了读和写打开一个二进制文件出错
“wb+”(读写)为了读和写,新建一个新的二进制文件建立一个新的文件
“ab+”(读写)打开一个二进制文件,在文件尾进行读和写建立一个新的文件

下文会用到"r",“w”,"r’b,"wb"四种打开方式

四.文件的读和写

读写文件是通过函数来实现的,下面介绍几个常用的函数

1.fputc

他是字符输出函数,返回值是输出的字符对应的ASCII码,如果输出失败,就会返回EOF

int main()
{
	//打开文件
	FILE* pf = fopen("test.txt", "W");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//写文件
	//把26个字母写到文件中
	for (int i = 'a'; i <= 'z'; i++)
	{
		fputc(i, pf);
	}
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

2.fgetc

他是字符输入函数。返回文件指针指向的那个字符,也就是读取到的字符,并且会让指向文件内容的指针向下一个字符偏移。当读取失败时,会返回EOF。

int main()
{
	//打开文件
	FILE* pf = fopen("text.txt", "r");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//读文件
	int ch = 0;
	for (int i = 0; i < 26; i++)
	{
		ch = fgetc(pf);
		printf("%c ", ch);
	}
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

3.fgets

他是文本行输入函数,可以一次读取多个字符
在这里插入图片描述
str是你想要把读取到的数据放到的内存空间,通常是一个字符数组,num是你想要读取的字符个数,这里面’\0‘会占一个位置,所以实际读取的字符个数要为num-1。Stream就是你要读取的那个文件的指针。

int main()
{
	//打开文件
	FILE* pf = fopen("text.txt", "r");
	if (NULL == pf)
	{
		perror("fopen");
		return 1;
	}
	//读一行数据
	char arr[20] = { 0 };
	fgets(arr, 5, pf);
	printf(arr);
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

4.fputs

他是文本行输出函数,使用示例如下

int main()
{
	//打开文件
	FILE* pf = fopen("text.txt", "w");
	if (pf == NULL)
	{
		perror("fopen");
		return 1;
	}
	//写一行数据
	fputs("hello world\n", pf);
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

5.fread

在这里插入图片描述

他是二进制输入函数,把文件中的数据以二进制的形式读进内存。ptr是一个内存块的指针,读到的数据将会放在这块空间,size是读取的每个元素的大小,count是想要读取的元素个数,stream是要操作的文件的指针。

int main()
{
	//打开文件
	FILE* pf = fopen("test.txt", "rb");
	if (NULL == pf)
	{
		perror("fopen");
		return 1;
	}
	//读文件
	char a;
	fread(&a, sizeof(char), 1, pf);
	printf("%c", a);
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
}

6.fwrite

在这里插入图片描述

他是二进制输出函数。使用示例如下

int main()
{
	//打开文件
	FILE* pf = fopen("test.txt", "wb");
	if (NULL == pf)
	{
		perror("fopen");
		return 1;
	}
	//写文件
	char a = 'c';
	fwrite(&a, sizeof(char), 1, pf);
	//关闭文件
	fclose(pf);
	pf = NULL;
	return 0;
	return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值