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<回 ...
随机推荐
- LeetCode OJ:Sort Colors(排序颜色)
Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...
- Linux-挂载命令
1.查询与自动挂载 mount:查询系统中已挂载的设备 mount -a :依据配置文件.etc/fsatb的内容,自动挂载 2.挂在命令格式 mount [-t 文件系统] [-o 特殊选项] 设备 ...
- WinForm判断程序是否已经在运行,且只允许运行一个实例
我们开发WinFrom程序,很多时候都希望程序只有一个实例在运行,避免运行多个同样的程序,一是没有意义,二是容易出错. 为了更便于使用,笔者整理了一段自己用的代码,可以判断程序是否在运行,只运行一个实 ...
- [基本操作] kd 树
概念就不说了吧,网上教程满天飞 学了半天才知道,kd 树实质上只干了两件事情: 1.快速定位一个点 / 矩形 2.有理有据地优化暴力 第一点大概是可以来做二维平面上给点/矩形打标记的问题 第二点大概是 ...
- @Override重写
package com.wisezone.f; //父类 public class Person { //姓名 private String name; //年龄 private int age; / ...
- Python3.7安装pyspider
下面是Python3.7安装pyspider的方式,能安装成功但是后期有很多问题,所以不建议,请使用3.5版本的Python进行安装!!!由于要做爬虫工作,所以学习pyspider框架,下面介绍安装步 ...
- idea 创建maven工程(入门)
转:http://blog.csdn.net/qq_32588349/article/details/51461182 1. 下载Maven 官方地址:http://maven.apache.org/ ...
- NSString *const 和 const NSString * 的区别
1.变量存储的指针可变,变量存储的值不可变 //A modifiable pointer to a constant NSString (its value can't be modified) &q ...
- 第七篇 PHP编码规范
当码农多年,始终进步不大,前面说了第一个原因是没有明确的目标:第二个原因是没有养成良好的习惯(即优秀的职业规范). 1)pear 规范 http://pear.php.net/manual/en/st ...
- 上传文件csv 导入功能
HTML代码: <script> function uploadCsv() { $('#chooseCsvFile').click(); } function doUploadCsv() ...