有5个学生的数据,要求:

(1)将它们存放到磁盘文件中;

(2)将磁盘文件中的第1,3,5个学生数据读入程序,并显示出来;

(3)将第三个学生的数据修改后存回磁盘文件中的原有位置;

(4)从磁盘文件读入修改后的5个学生的数据并在屏幕输出。

为了使自己能够看懂程序,先看说明:

istream&read(char *buffer,int len);

ostream&wirte(const*char *buffer,int len);

字符指针buffer指向内存中一段存储空间,len是读写的字节数。

abort函数的作用是退出程序,与exit函数的作用相同。

seekg(位移量,参照位置);以参照位置为基础,将输入指针移动若干字节;

seekp(位移量,参照位置);以参照位置为基础,将输出指针移动若干字节;

参照位置可以是下面三个之一:

ios::beg文件开头

ios::cur指针当前位置

iod::end文件末尾

#include<fstream>
#include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
struct student
{
int num;
char name[20];
float score;
};
int main()
{
student stud[5]=
{1001,"Li",85,
1002,"Fun",97.5,
1003,"Wang",98,
1004,"Tan",76.5,
1005,"Ling",96};
fstream iofile("stud.dat",ios::in|ios::out|ios::binary);
//用fstream类定义输入输出二进制文件流对象iofile
if(!iofile)
{
cerr<<"open error!"<<endl;
abort();
}
for(int i=0;i<5;i++) //像磁盘中输入5个学生的数据
{
iofile.write((char *)&stud[i],sizeof(stud[i]));
}
student stud1[5]; //用来存放从磁盘文件读入的数据
for(int i=0;i<5;i+=2)
{
iofile.seekg(i*sizeof(stud[i]),ios::beg);//定位于第0,2,4学生数据开头
iofile.read((char *)&stud1[i],sizeof(stud1[0]));
//先后读入3个学生的数据,存放在stud1[0], stud1[1],stud1[2]中
cout<<stud1[i].num<<" "<<stud1[i].name<<" "<<stud1[i].score<<endl;
//输出 stud1[0], stud1[1],stud1[2]各成员的值
}
cout<<endl;
//修改第3个学生(从0开始)的数据
stud[2].num=1012;
strcpy(stud[2].name,"qianshou");
stud[2].score=100;
iofile.seekp(2*sizeof(stud[0]),ios::beg); //定位到第三个数据的开头
iofile.write((char *)&stud[2],sizeof(stud[2])); //更新第三个学生的数据
iofile.seekg(0,ios::beg); //从新定位于文件开头
for(int 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;
}

程序输出结果:

/*
1001 Li 85
1003 Wang 98
1005 Ling 96 1001 Li 85
1002 Fun 97.5
1012 qianshou 100
1004 Tan 76.5
1005 Ling 96
*/

C++对二进制文件的操作实例的更多相关文章

  1. CentOS 配置防火墙操作实例(启、停、开、闭端口):

    CentOS 配置防火墙操作实例(启.停.开.闭端口): 注:防火墙的基本操作命令: 查询防火墙状态: [root@localhost ~]# service   iptables status< ...

  2. python操作mysql数据库的相关操作实例

    python操作mysql数据库的相关操作实例 # -*- coding: utf-8 -*- #python operate mysql database import MySQLdb #数据库名称 ...

  3. 安卓 SQLite数据库操作实例

    前段时间写了个安卓平台下SQLite数据库操作的实例 ,一直没得时间总结 ,今天把它弄出来了. 在Android 运行时环境包含了完整的 SQLite. 首先介绍一下SQLite这个数据库: SQLi ...

  4. 在安卓开发中使用SQLite数据库操作实例

    前段时间写了个安卓平台下SQLite数据库操作的实例 ,一直没得时间总结 ,今天把它弄出来了. 在Android 运行时环境包含了完整的 SQLite. 首先介绍一下SQLite这个数据库: SQLi ...

  5. Sql Server 函数的操作实例!(执行多条语句,返回Select查询后的临时表)

    Sql Server 函数的操作实例!(执行多条语句,返回Select查询后的临时表) SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ==== ...

  6. CentOS 配置防火墙操作实例(启、停、开、闭端口)CentOS Linux-FTP/对外开放端口(接口)TomCat相关

    链接地址:http://blog.csdn.net/jemlee2002/article/details/7042991 CentOS 配置防火墙操作实例(启.停.开.闭端口): 注:防火墙的基本操作 ...

  7. Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表)

    Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表) SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUN ...

  8. FTP命令具体解释(含操作实例)

    以下是微软命令行FTPclient命令大全.假设你想使用"未加工(RAW)"FTP命令而非以下翻译过的请參考:http://www.nsftools.com/tips/RawFTP ...

  9. CentOS配置防火墙操作实例

    CentOS 配置防火墙操作实例(启.停.开.闭端口): 注:防火墙的基本操作命令: 查询防火墙状态: [root@localhost ~]# service iptables status<回 ...

随机推荐

  1. requests 简单应用

    http://docs.python-requests.org/zh_CN/latest/user/quickstart.html  ,官方文档.自己有空看看顺便敲两下熟悉一下. 还有别把文件放的太深 ...

  2. Red hat linux 下配置Java环境(jdk)

      1.把jdk-6u25-linux-i586-rpm.bin 复制到redhat linux中,放到/usr/java 目录下,该目录是mkdir 的,并chmod 755 jdk-6u25-li ...

  3. Unity3D for Android 纹理压缩支持

    http://blog.csdn.net/asd237241291/article/details/48548557 首先附图:Unity3D for Android支持的纹理压缩格式 纹理压缩可以通 ...

  4. gulp之sass 监听文件,自动编译

    gulpfile.js文件如下: var gulp = require('gulp'); var sass = require('gulp-sass'); gulp.task('default', f ...

  5. bzoj 4712 洪水——动态DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4712 因为作为动态DP练习而找到,所以就用动态DP做了,也没管那种二分的方法. 感觉理解似乎 ...

  6. bzoj 3328 PYXFIB —— 单位根反演

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3328 单位根反演,主要用到了 \( [k|n] = \frac{1}{k} \sum\lim ...

  7. hl7 V2中Message Control ID的含义及应用

    HL7 v2中的MSH,MSA段都有Message Control ID. 有几点需要注意: 1.所有的MessageControlID必须唯一 2.对于MSH中的MessageControlID, ...

  8. Unity脚本默认事件执行顺序

    1. Awake Awake用于脚本唤醒.此方法为系统执行的第一个方法,用于脚本的初始化,在脚本的生命周期中只执行一次. 2. Start Start方法在Awake之后执行,在脚本的生命周期中只执行 ...

  9. DotNetBar笔记

    1.TextBoxDropDown  这是一个绝对TMD坑爹的狗屁玩意儿.键盘的四个事件全部不好使.但是这个玩意儿有个好处就是他的DropDownControl属性可以用来制作ComboGrid. 然 ...

  10. ThreadPoolExecutor之一:使用基本介绍

    一.concurrent包中的线程池的简单介绍 线程池按照线程数量可以分为:一是固定线程数量的线程池:二是可变数量的线程池. 线程池按照执行时间可以分为:一是立即执行线程池:二是延时线程池. Thre ...