fread和fwrite和feof读写二进制文件

Posted 王默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fread和fwrite和feof读写二进制文件相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include <stdlib.h>

void text_to_bin(char *argv[]);
void bin_to_text();

typedef struct
{
	int xh;
	char name[20];
	int age;
}Student;
int main(int a,char *argv[]){
	
	if(a!=4){
		printf("参数不够!\n");
	}
	text_to_bin(argv);
	bin_to_text(argv);

	return 0;

}
void text_to_bin(char *argv[]){
	Student stu;
	FILE *fp1, *fp2;
	fp1 = fopen(argv[1],"r");
	if(fp1==NULL){
	     printf("source file open error");
	     exit(1);
	}
	fp2 = fopen(argv[2],"wb");//write b bytes二进制文件 要写入的二进制文件
	if(fp2==NULL){
	     printf("bytes file open error");
		exit(1);	
	}
	while(fscanf(fp1,"%d %s %d", &stu.xh, stu.name, &stu.age)!=EOF){
		//printf("%s\n",stu.name);
		fwrite(&stu, sizeof(stu), 1, fp2);//写入二进制文件stu是指向数据块的二进制结构体变量; 每次写入1个结构体变量
		
	}
	fclose(fp1);
	fclose(fp2);
}
void bin_to_text(char *argv[]){
	Student stu;
	FILE *fp1, *fp2;
	fp1 = fopen(argv[2],"rb");//只读方式读取二进制文件
	if(fp1==NULL){
	     printf("source file open error");
	     exit(1);
	}
	fp2 = fopen(argv[3],"w");//写入文本文件
	if(fp2==NULL){
	     printf("bytes file open error");
		exit(1);	
	}
	//必须>0 循环
/* 	while(fread(&stu,sizeof(stu), 1, fp1)){
		fprintf(fp2, "%d %s %d\n",stu.xh, stu.name, stu.age);
	} */
	
	size_t size = fread(&stu, sizeof(stu),1,fp1);
	if(size==0) return;
	//feof只能用在二进制文件
	while(!feof(fp1)){
		fprintf(fp2, "%d %s %d\n",stu.xh, stu.name, stu.age);
		fread(&stu, sizeof(stu),1,fp1);//必须加
	}
	
	fclose(fp1);
	fclose(fp2);
}

  

以上是关于fread和fwrite和feof读写二进制文件的主要内容,如果未能解决你的问题,请参考以下文章

C 语言文件操作 ( 使用 fread 和 fwrite 实现二进制文件的拷贝 | stat 统计文件大小 | feof 判定文件结尾 )

C 语言文件操作 ( fread 函数 )

文件读写函数

如何使用 fread 和 fwrite 函数读写二进制文件?

php socket 编程读写函数

如何使用fread函数循环读取二进制文件