拿二进制存储文件

本文介绍了一个使用C++进行二进制文件操作的例子,包括如何将结构体数据写入文件、从文件中读取特定记录、更新文件中的记录以及读取更新后的全部记录。

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

/*
*本段代码是把数据记录成二进制文件保存
*烟台大学 王飞
*时间  2013 6 21
*/

#include<iostream>
#include<fstream>
#include<cstdlib>
#include<cstring>

using namespace std;

struct student
{
	int num;            //学号    
	char name[20];      //名字
	float score;        //成绩

};
int main( )
{
    int i;
	student stud[5]={1001,"Li",85,1002,"Fun",97.5,1004,"Wang",54,
		1006,"Tan",76.5,1010,"ling",96};            //初始化
    
	fstream iofile("stud.txt",ios::in|ios::out|ios::binary);
	
	//用fstream类定义输入输出二进制文件流对象iofile
	
	if(!iofile)
	{
		cerr<<"open error!"<<endl;
		abort( );
	}
	//(1)向磁盘文件输出5个学生的数据并显示出来
	cout<<"(1)向磁盘文件输出5个学生的数据并显示出来"<<endl;
	for( i=0;i<5;i++)
	{
		iofile.write((char *)&stud[i],sizeof(stud[i]));
		cout<<stud[i].num<<" "<<stud[i].name<<" "<<stud[i].score<<endl;
	}

	//(2)将磁盘文件中的第1,3,5个学生数据读入程序,并显示出来;
	cout<<"(2)将磁盘文件中的第1,3,5个学生数据读入程序,并显示出来"<<endl;
	student stud1[5];                  //用来存放从磁盘文件读入的数据
	for(i=0;i<5;i=i+2)
	{
		iofile.seekg(i*sizeof(stud[i]),ios::beg);  //定位于第0,2,4学生数据开头
		iofile.read((char *)&stud1[i/2],sizeof(stud1[0]));
		//先后读入3个学生的数据,存放在stud1[0],stud[1]和stud[2]中
		cout<<stud1[i/2].num<<" "<<stud1[i/2].name<<" "<<stud1[i/2].score<<endl;
		//输出stud1[0],stud[1]和stud[2]各成员的值
	}
	cout<<endl;

	//(3) 将第3个学生的数据修改后存回磁盘文件中的原有位置。
    cout<<"(3)将第3个学生的数据修改后存回磁盘文件中的原有位置"<<endl;
	stud[2].num=1012;                         //修改第3个学生(序号为2)的数据
	strcpy(stud[2].name,"Wu");
	stud[2].score=60;
	iofile.seekp(2*sizeof(stud[0]),ios::beg);   //定位于第3个学生数据的开头
	iofile.write((char *)&stud[2],sizeof(stud[2])); //更新第3个学生数据
	iofile.seekg(0,ios::beg);                       //重新定位于文件开头

	//(4)从磁盘文件读入修改后的5个学生的数据并显示出来。
	cout<<"(4)从磁盘文件读入修改后的5个学生的数据并显示出来"<<endl;
	for(i=0;i<5;i++)
	{
		iofile.read((char *)&stud[i],sizeof(stud[i]));  //读入5个学生的数据
		cout<<stud[i].num<<" "<<stud[i].name<<" "<<stud[i].score<<endl;
	}
	iofile.close( );
	return 0;
}


输出结果:

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值