我是靠谱客的博主 激动狗,最近开发中收集的这篇文章主要介绍C语言 文件的读写,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

引入

OS操作系统
在这里插入图片描述

打开文件fopen()函数

读写模式:
r:读取已有文件
w:文件不存在,创建文件并写入文件.文件存在,内容清零,再写入文件
a: 文件不存在,创建文件并写入文件.文件存在,以追加的形式写入文件

r+:读写已有文件
w+:文件不存在,创建文件并读写文件.文件存在,内容清零,再读写文件
a+:文件不存在,创建文件并读写文件.文件存在,以追加的形式写文件,从头开始读文件

总结:
1)
r,r+已有文件
w,w+,a,a+:已有文件+创建文件
2)如果是二进制文件,要在后面加一个b
3)以w,w+模式会将文件清空

在这里插入图片描述

关闭文件fclose()函数

关闭成功,返回0
关闭失败,返回EOF
总结:
1)
EOF:C标准函数库中表示文件结束符(end of file)
在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。
2)如果不关闭文件,我们的内容就没有保存在文件中

在这里插入图片描述

写入文件的函数

输出流

fputc()写入一个字符,成功:返回写入的字符,失败:返回EOF
fputs()写入一个字符串,成功:返回一个非负值,失败:EOF
fprintf()写入一个字符串, 成功:返回写入的字符的个数,失败:返回负数

在这里插入图片描述
案例
库变量:
FILE:一个适合存储文件流信息的对象类型
在这里插入图片描述

代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//写入文件--fputc(),fputs(),fprintf()
int main()
{
	printf("1.创建文件空指针n");
	FILE *fp=NULL;
	printf("2.创建一个文件n");
	/*d:/
	与平时的转义字符相反
	*/
	fp=fopen("d:/AAADQLearning/test_file.txt","a");
	//w写入文件,存在,清零;不存在,创建
	//a写入文件,存在,追加;不存在,创建

	printf("3.fputc写入一个字符an");
	char rc=fputc('m',fp);//成功,返回写入的字符,失败,返回EOF
	fputc('n',fp);

	printf("4.fputs写入一个字符串n");
	int rs=fputs("dq,as a resultn",fp);//成功,返回0,失败返回EOF

	printf("5.fprintf写入一个字符串n");
	int rf=fprintf(fp,"as good asn");//成功,返回传入的字符个数;失败,返回负数

	printf("rc=%c rs=%d rf=%dn",rc,rs,rf);//m 0 11

	printf("写入完成!n");
	printf("关闭文件指针n");
	fclose(fp);

	getchar();
	return 0;
}

读取文件的函数

fgetc()读取一个字符,成功,返回读取的字符,失败,返回EOF
fgets()读取n-1字符串, 成功时返回字符串地址,错误或0读入时返回NULL
fscanf()读取字符串, 成功,返回正确读入项目(items)的个数,错误时返回EOF
总结:
1)
fgets()读取n-1个字符,把字符串复制给缓冲区,在末尾追加一个null
fscanf()读取时遇到空格符会停止读取,直接返回目前读到的结果

在这里插入图片描述
案例
1)案例1
在这里插入图片描述
2)案例2
在这里插入图片描述

读取文件代码
代码1

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//读取文件--fgetc(),fgets(),fscanf()
//输入流
int main()
{
	//创建文件指针
	FILE *fp=NULL;
	fp=fopen("D:/AAADQLearning/test_file.txt","r+");//r:读取已有文件r+读写已有文件

	char buff[1024];//使用缓冲区装读取到的字符
	char rc=fgetc(fp);
	char *rs=fgets(buff,sizeof(buff),fp);//读取1024个字符,字符串一行一行地读取

	char *temp="";
	int rf=fscanf(fp,temp);//fscanf()遇到换行符了,所以什么也没读取到就返回了
	strcat(buff,temp);
	/*
	fgetc()成功:返回读取到的字符,失败,返回EOF
	fgets()成功:返回读取到的字符串(地址),失败,返回NULL
	fscanf()成功,返回成功读取的个数,失败,返回EOF
	*/
	printf("rc=%c rs=%s rf=%dn",rc,rs,rf);
	printf("读取的内容:nbuff=%sn",buff);

	fclose(fp);//关闭文件指针
	printf("读取完成!n");

	getchar();
	return 0;
}

代码2

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//循环读取文件--fgetc(),fgets(),fscanf()
//输入流
int main()
{
	//创建文件指针
	FILE *fp=NULL;
	fp=fopen("D:/AAADQLearning/test_file.txt","r+");//r:读取已有文件r+读写已有文件

	char buff1[1024];//使用缓冲区装读取到的字符
	char buff2[1024];
	//使用fgets()循环一行行地读取文件
	printf("fgets():n");
	while(fgets(buff1,1024,fp)!=NULL)//只有这样才行
	{
		//输出缓冲区中的内容
		printf("%s",buff1);
	}

	//使用fscanf()循环一行行地读取文件
	printf("fscanf():n");
	//fscanf()遇到空格和换行时结束
	//所以fscanf(fp,"%s",buff2)!=EOF
	//表示遇到空格符或换行时,结束这一个循环,直接进行下一个循环,从没有空格和换行符的地方读取
	//最终输出:没有空格与换行,直接输出一行很长的字符串
	while(fscanf(fp,"%s",buff2)!=EOF)
	{
		printf("%s",buff2);
	}

	//使用fgetc()循环地读取文件
	printf("fgetc():n");
	//fgetc()会一个字符一个字符地输出,最终输出所有内容
	while(fgetc(fp)!=EOF)
	{
		printf("%c",fgetc(fp));
	}
	fclose(fp);//关闭文件指针
	printf("读取完成!n");

	getchar();
	return 0;
}

读写文件综合代码

#include<stdio.h>
#include<stdlib.h>
//文件--读写文件综合
const int size=100;
int main()
{
	//写文件--输出流
	FILE *fpw=NULL;
	fpw=fopen("D:/AAADQLearning/test_write.txt","a+");//写文件
	int i;
	for(i=0;i<100;i++)
	{
		fprintf(fpw,"arr[%d]n",i);
	}
	
	printf("完成写入!n");

	//读文件--输入流
	FILE*fpr=NULL;
	fpr=fopen("D:/AAADQLearning/test_file.txt","r+");//读文件

	char buff[1024];
	while(fgets(buff,1024,fpr)!=NULL)
	{
		//把读取到的文件内容追加到test_write.txt文件中
		//输出流
		fputs(buff,fpw);
	}
	printf("读取并写入文件完成!n");
	//关闭文件指针
	fclose(fpr);
	fclose(fpw);
	getchar();
	return 0;
}

补充

1.文件相关的函数使用时返回的结果

fgetc():成功时返回读入的字节数。错误或文件尾时返回EOF;
fputc():成功时返回写入的字节数。错误时返回EOF;
fgets():成功时返回字符串地址,错误或0读入时返回NULL;
fputs():成功时返回一个非负整数,错误时返回EOF
fprintf():成功时返回写入的字节数,错误时返回负数(negative value)
fscanf():返回正确读入项目(items)的个数,错误时返回EOF
fwrite():返回正确写入项目的个数,错误时返回0
fread():返回正确读入项目的个数,错误时返回0
fseek():成功返回0,错误返回-1。

最后

以上就是激动狗为你收集整理的C语言 文件的读写的全部内容,希望文章能够帮你解决C语言 文件的读写所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部