c文件操作-二进制文件读写

上次已经提到过了文件基本分为二进制文件和文本文件,文本文件是人可以直接读的懂的以文字的方式表达出来的文件,二二进制文件则需要机器以特定的方式或者软件来打开,比如音频视频文件都是二进制的。

今天我们通过一个简单的例子来了解一下二进制文件读写以及fseek()函数的使用:

#include <iostream>

using namespace std;

struct student
{
	int number;
	char name[];
 }; 
 
 void getdata(student stu[],int number)
 {
 	for(int i=0;i<number;i++)
 	{
 		cout<<"the "<<i+1<<" student:"<<endl;
 		cout<<"please cin number of sstudent:";
 		cin>>stu[i].number;
 		cout<<"please cin name of student:";
 		cin>>stu[i].name;
	 }
 }
 int savedata(student stu[],int number)
 {
 	int ret=-1;
 	FILE *fp=fopen("student.data","w");
 	if(fp)
 	{
 		ret=fwrite(stu,sizeof(student),number,fp);
 		fclose(fp);
	 }
	 return ret==number;
 }
 void read(FILE* fp,int index);
 void seek(void)
 {
 	FILE* fp=fopen("student.data","r");
 	if(fp)
 	{
 		cout<<"fopen in seek()"<<endl;
 		fseek(fp,0L,SEEK_END);
 		long size=ftell(fp);
 		int number=size/sizeof(student);
 		int index=0;
 		cout<<"There are "<<number<<" students,which one do you want to view?";
 		cin>>index;
 		index--;
 		read(fp,index);
 		fclose(fp);
	 }
	 else cout<<"open failed of fopen!";
 }
 int main()
 {
 	
 	int num;
 	cout<<"please input the number of students:";
 	cin>>num;
 	student stu[num];
 	getdata(stu,num);
 	if(savedata(stu,num))
 	cout<<"save succeded!";
 	seek();
 }
 void read(FILE* fp,int index)
 {
 	fseek(fp,index*sizeof(student),SEEK_SET);
 	student stu;
 	if(fread(&stu,sizeof(student),1,fp)==1)
 	{
 		cout<<"the "<<index+1<<"student:"<<endl;
 		cout<<stu.number<<" "<<stu.name;
	 }
 }


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值