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);
}

  

原文地址:https://www.cnblogs.com/wanglijun/p/8620711.html

时间: 2024-10-22 23:04:27

fread和fwrite和feof读写二进制文件的相关文章

关于二进制文件fread、fwrite函数使用读写

环境:vs2013 语言:C语言 时间:2015年3月10日 功能:实现二进制文件的读写实例 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #define FILENAME "d:/studentInfo" #define COUNT 5 typedef struct { char name[10]; short Math; short Chinese; short

fread和fwrite用法小结

fwrite和fread是以记录为单位的I/O函数,fread和fwrite函数一般用于二进制文件的输入输出. #include <stdio.h>size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);       返回值:读或写的记录数,成功时返回的记录数等于nmemb,出错

文件块读写-使用fread和fwrite

通常使用fprintf和fscanf进行对文件的格式化读写,但是因为读写的过程中要进行转码,因此 那么可以通过fread和fwrite进行对数据块的读写. 函数定义为 size_t fread(void *buffer,size_t numbyte,size_t count, FILE *fp); size_t fwrite(const void *buffer,size_t numbyte,size_t count, FILE *fp); 参数含义,buffer-数据块首地址,numbyte-

函数fgets和fputs、fread和fwrite、fscanf和fprintf用法小结 (转)

函数fgets和fputs.fread和fwrite.fscanf和fprintf用法小结 字符串读写函数fgets和fputs 一.读字符串函数fgets函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为: fgets(字符数组名,n,文件指针): 其中的n是一个正整数.表示从文件中读出的字符串不超过 n-1个字符.在读入的最后一个字符后加上串结束标志'\0'.例如:fgets(str,n,fp);的意义是从fp所指的文件中读出n-1个字符送入 字符数组str中. [例10.

fread和fwrite的使用

1.rread和fwrite函数 数据块I/O fread与fwrite函数原型:size_t fead(void *buffer, size_t size, size_t, count, FILE *pf)size_t frite(void *buffer, size_t size, size_t count, FILE *pf)功能:读写数据块(将内存的内容直接写入磁盘)返回值:成功,返回读/写的块数,出错或文件尾,返回0.参数含义:buffer 指向要输入/输出数据块首地址指针.size

数据块I/O:fread与fwrite

函数原型: size_t fread(void *buffer,size_t size, size_t count,FILE *fp) size_t fwrite(void *buffer,size_t size, size_t count,FILE *fp) 功能:读/写数据块 返值:成功,返回读/写的块数:出错或文件尾,返回0 说明: typedef unsigned size_t; buffer: 指向要输入/输出数据块的首地址的指针 size: 每个要读/写的数据块的大小(字节数) co

[Matlab+C/C++] 读写二进制文件

introduction 由于Matlab操作简单.方便,它被应用于非常多领域:音频处理,图像处理,数值计算等.虽然MATLABeasy操作.但受限于他的语言解释机制.MATLAB的运行速度通常较低.C/C++一般被觉得是运行较为高效的高级程序设计语言. 假设结合MATLAB和C/C++.或许我们能够获得操作简便性和运行速度的折中.这样的结合的一般形式是:MATLAB负责绝大部分工作,C/C++负责一些关键部分的实现.其详细方法在我之前的博文中已经有所介绍. 在处理某些数据的时候,可能涉及到文件

用fread和fwrite实现文件复制操作

#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc,char **argv) { FILE *fp_src,*fp_des; char buf[128]; int num; if(argc!=3) { printf("the format must be: cp_example file_src file_des\n"); exit(EXIT_FAI

C/C++读写二进制文件

C++读写二进制文件 最近在给android层提供支持,因此代码都是用标准库库函数写出来的,好多windows和第三方的库不能或者很难使用,下面有我在读写二进制文件时候的一些心得,也算是一种总结吧 1.读二进制信息 1 bool bRet = true; 2 std::ofstream fout(szDestFile, std::ios::binary | std::ios::app); 3 std::ifstream fin(szOrigFile, std::ios::binary); 4 5