C++对二进制文件的操作实例
有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++对二进制文件的操作实例的更多相关文章
- CentOS 配置防火墙操作实例(启、停、开、闭端口):
CentOS 配置防火墙操作实例(启.停.开.闭端口): 注:防火墙的基本操作命令: 查询防火墙状态: [root@localhost ~]# service iptables status< ...
- python操作mysql数据库的相关操作实例
python操作mysql数据库的相关操作实例 # -*- coding: utf-8 -*- #python operate mysql database import MySQLdb #数据库名称 ...
- 安卓 SQLite数据库操作实例
前段时间写了个安卓平台下SQLite数据库操作的实例 ,一直没得时间总结 ,今天把它弄出来了. 在Android 运行时环境包含了完整的 SQLite. 首先介绍一下SQLite这个数据库: SQLi ...
- 在安卓开发中使用SQLite数据库操作实例
前段时间写了个安卓平台下SQLite数据库操作的实例 ,一直没得时间总结 ,今天把它弄出来了. 在Android 运行时环境包含了完整的 SQLite. 首先介绍一下SQLite这个数据库: SQLi ...
- Sql Server 函数的操作实例!(执行多条语句,返回Select查询后的临时表)
Sql Server 函数的操作实例!(执行多条语句,返回Select查询后的临时表) SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ==== ...
- CentOS 配置防火墙操作实例(启、停、开、闭端口)CentOS Linux-FTP/对外开放端口(接口)TomCat相关
链接地址:http://blog.csdn.net/jemlee2002/article/details/7042991 CentOS 配置防火墙操作实例(启.停.开.闭端口): 注:防火墙的基本操作 ...
- Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表)
Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表) SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUN ...
- FTP命令具体解释(含操作实例)
以下是微软命令行FTPclient命令大全.假设你想使用"未加工(RAW)"FTP命令而非以下翻译过的请參考:http://www.nsftools.com/tips/RawFTP ...
- CentOS配置防火墙操作实例
CentOS 配置防火墙操作实例(启.停.开.闭端口): 注:防火墙的基本操作命令: 查询防火墙状态: [root@localhost ~]# service iptables status<回 ...
随机推荐
- ACM提交,C++,G++,C,GCC的区别
今天做了一道水题,POJ-1004,水题一个,12个double类型的数求平均数 但是, #include <iostream> #include <cstdio> using ...
- cmake安装MySQL数据库实例
一.编译安装MySQL前的准备工作 首先检查是否有安装其他版本的编译器和数据库,先卸载干净. 安装编译源码所需的工具和库 yum install gcc gcc-c++ ncurses-devel p ...
- C++中头文件、源文件之间的区别与联系
.h头文件和.cpp文件的区别 疑惑1:.h文件能够编写main函数吗? 实验: 编写test.h文件,里面包含main函数 若直接编译g++ test.h -o test,通过file命令 file ...
- php 中改变字符编码的函数 是 iconv()
json_enocode() 此函数里边接收的数据必须是utf8格式.要不然会输出null
- CodeForces - 688C:NP-Hard Problem (二分图&带权并查集)
Recently, Pari and Arya did some research about NP-Hard problems and they found the minimum vertex c ...
- LeetCode 688. Knight Probability in Chessboard
原题链接在这里:https://leetcode.com/problems/knight-probability-in-chessboard/description/ 题目: On an NxN ch ...
- jenkins 参数化构建和增加环境变量
1.参数化构建 2.增加环境变量 prepare an environment for the run,需要安装Environment Injector插件
- 静默安装Azure CLI
Azure的CLI目前已经是基于Python的2.0版本.其信息在下面的链接可以找到: https://github.com/Azure/azure-cli 其安装方法可以根据网站上描述的命令实现: ...
- Sql server big data如何批量update数据
原因: 要一次性update 2千万条数据,虽然update sql很简单,但是由于一次性修改太多的数据,造成数据库log满了,就会报error: [ErrorCode: 9002, SQL Stat ...
- [转载]rmmod: can't change directory to '/lib/modules': No such file or directory
转载网址:http://blog.csdn.net/chengwen816/article/details/8781096 在我新移植的kernel(3.4.2)和yaffs2文件中,加载新编译的内核 ...