【C语言】文件的基本读写操作等

本文主要介绍了C语言中关于文件的各种操作,包括打开和关闭文件,字符与字符串的读写,格式化及数据块的读写操作,详细阐述了文件的全面使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件

  1. 打开文件
FILE *fp;
fp = fopen("test.txt", "r");	//以读的形式打开文本文件
if (fp == NULL)
{
	exit(0);
}
文本文件
	r 只读	r+ 读写
	w 只写	w+ 读写
			  a+ 读写尾部添加
二进制文件
	rb 只读		rb+ 读写
	wb 只写		wb+ 读写
	ab 尾部添加	  ab+ 读写尾部添加
  1. 关闭文件
fclose(fp);
  1. 字符方式的读写文件
char ch;

//写 - fputc()
ch = getchar();
while ( ch != '$' )
{
	fputc(ch,fp);	//把ch变量的字符值写往文件
	ch = getchar();	
}

//读	-fgetc()
ch = fgetc(fp);	//从文件里读取一个字符
while ( ch != EOF )	//判断文件是否读完,未完,则继续执行读操作
{
	putchar(ch);	//将字符送到屏幕
	ch = fgetc(fp);
}
putchar(10);	//换行
  1. 字符串读写文件
//读 - fgets()
char ch[41], *cp;

cp = fgets(ch, 41, fp);	//从文件中读取一行字符串,不得超过40字节(还有一个字节是'\0')
while ( cp != NULL )
{
	printf("%s", ch);
	cp = fgets(ch, 40, fp);
}

//写 - fputs()
char ch[5][41], *cp;
int i;
for ( i = 0; i < 0; i++ )
{
	gets(ch[i]);	//将一个字符串放到数组中
}
for ( i = 0; i < 5; i++ )
{
	fputs(ch[i], fp);	//将一个字符串写往文件
	fputs("\n", fp);	//在文本文件中换行
}
  1. 格式化方式读写文件
fscanf() 把从文本文件中读出的字符串按指定的格式转换为相应类型变量的值(不只是字符型)
fprintf() 把变量的值按指定的方式转化为文本写往文本文件
	fscanf(文本指针,格式控制字符串,输入项的地址列表);
		其返回值是事实上已赋值的变量的个数,如果未进行分配,则返回EOF
	fprintf(文本指针,格式控制字符串,输入项的列表);
		其返回值是正确写入文件的字节数,否则返回负数
int main(void)
{
	char name[9];
	FILE *fp;
	int age, i, num=0;
	float score;
	
	fp = fopen("student.txt", "w");	//以写的形式打开文件
	if ( fp == NULL )
		exit(0);
	
	for ( i = 0; i < 3; i++ )
	{
		printf("请输入学生_%d的姓名,年龄,成绩:", i+1);
		scanf("%s%d%f", name, &age, &score);
		fprintf(fp, "%s %4d %6.2f\n", name, age, score);	//将变量数据写往文件
	}
	fclose(fp);
	
	fp = fopen("student.txt", "r");	//以读的形式打开文件
	printf("从文件中读出的学生数据:\n");
	i = fscanf(fp, "%s%d%f", name, &age, &score);	//利用scanf的返回值来判断读是否成功
	while ( i == 3 )
	{
		printf("学生_%d的姓名,年龄,成绩:", ++num);
		printf("%s %4d %6.2f\n", name, age, score);	//将数据打印到屏幕上
		i = fscanf(fp, "%s%d%f", name, &age, &score);
	}
	fclose(fp);

	return 0;
}
  1. 数据块读写文件
	数据块读写文件在读写过程中不对数据进行转换,直接在内存与文件之间进行数据拷贝;
	读写过程中不需考虑数据的性质和类型,只是简单对存储空间进行复制
	fread(buffer,size,count,fp);
	fwrite(buffer,size,count,fp);
	buffer:对应一个连续内存数据区的起始地址,通常是一个指针值
	size:欲复制的一个数据块的大小(字节数)
	count:本次欲复制多少个数据块
	fp:指向读写文件的文件指针
	
	int feof(FILE *fp)
	用于在进行读文件时,检测是否读写文件所有数据,如果文件结束,则返回非0值,反之返回0
	while (!feof(fp)) {}
int main(void)
{
	FILE *fp1, *fp2;
	char data;
	
	fp1 = fopen("stu.txt", "rb");
	fp2 = fopen("stu_copy.txt", "wb");
	if ( fp1 == NULL || fp2 == NULL )
		exit(0);
	
	fread(&data, sizeof(char), 1, fp1);	//读一个字节的内容给变量data
	while ( !feof(fp1) )
	{
		fwrite(&data, sizeof(char), 1, fp2); 	//将data的内容写到fp2
		fread(&data, sizeof(char), 1, fp1);
	}
	fclose(fp1);
	fclose(fp2);

	return 0;
}
  1. 文件的其他操作
	fseek(),可以将文件位置指针移动到指定的位置
	int fseek(FILE *fp,long 位移量, int 起始点);
	起始点参数:0 文件开始位置; 1 文件当前位置; 2 文件末尾位置
	位移量: 值为正时,指针向后移动;值为负时,指针向前移动;若是long型,则100L
	
	rewind(FILE *fp) 是使文件的文件位置指针重新指向文件开始的位置
	
	fflush(stdin);	清空输入缓存区,保证下面的scanf()读新的循环条件
	
	ftell(FILE *fp) 用于获取文件位置指针当前值
	
	ferror(FILE *fp) 用于测试给定文件指针指向的文件信息区的错误标识符
	
	cleareer(FILE *fp) 使文件错误标志和文件结束标志置为0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值