C++面向对象程序设计(第二版)-第八章_数据流与文件的输入输出
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ostream& ostream::write(const char s[],int n)
库iostream还提供常用的ostream成员函数。
ostream& ostream::flush()
强制任何没有完成的操作符插入完成。函数返回一个对 *this的引用。
2015年6月27日星期六
C++面向对象程序设计
2015年6月27日星期六
4.进制
C++面向对象程序设计
8.2.2 常用的输入/输出函数
常用istream成员函数包含:
int istream::get()
如果输入流包括附加的数据,函数取得并返回下
一个字符;否则它返回EOF。
istream& istream::get(char &c)
如果输入流包括附加的数据,函数取得并将下一
表8-3 文件指针函数
功能说明 设定文件读取(输入)指针到距离文件某一特定 指针pos个字节的位置。特定指针由seek_dir指定 ,有以下三种ios::beg(文件起始)、ios::cur(当 前文件指针的位置)或ios::end(文件结尾) 返回当前文件读取指针的位置 设定文件写入(输出)指针到距离文件某一特定 指针pos个字节的位置。特定指针由seek_dir指定 ,有以下三种ios::beg(文件起始)、ios::cur(当 前文件指针的位置)或ios::end(文件结尾) 返回当前文件写入指针的位置
所谓文件的I/O(输入/输出)是指以程序为主的角度而言,
文件打开为输入状态时(in),表示程序将由文件读入数据
;文件打开为输出状态时(out),表示程序将输出数据至 文件。
我们通常将数据由文件输入到程序称之为读取,程序将数据
输出到文件称之为写入。
C++面向对象程序设计
2015年6月27日星期六
8.3.1 fstream类
个字符分配给c;否则就是没有定义对c的作用。 返回一个对*this(调用对象)的引用。
C++面向对象程序设计
2015年6月27日星期六
8.2.2 常用的输入/输出函数
istream& istream::get(char s[],int n,char delim='\n')
从输入流获取字符并将它们分配给s直到下面的一个条件发 生:取得n-1个字符,没有输入字符了,或者下一个接收的 字符的值为delim。
对于原本就是字符的数据,并不需要转型,即 可读取/写入到文件里;但对于数字型的数据
,则必须转为字符指针,然后传入write和
read函数。
C++面向对象程序设计
2015年6月27日星期六
8.3.4 文件指针的使用
文件指针是文件读取/写入数据时插入或输出的位置 。文件指针有两种,一个是写入指针,另一个是读取 指针。当文件被打开时,这两个指针都将被设定指向 文件的起始处。
3 系统分析 4 功能模块设计
C++面向对象程序设计
2015年6月27日星期六
3 系统分析
现在校园信息管理系统已经能够完成人员信息 的输入、显示和分析等一系列工作,但是现在 的程序并不能将信息长期保存,所以,将数据
永久的保存是校园信息管理系统必须实现的功
能。
将文件读写的功能加入到当前的校园信息管理 系统中来,以实现信息的长期保存。
read函数外,还可以使用“<<”和“>>”运算符
,而所有在8.2.1节中提及的格式控制方法,均可
以在文件I/O中使用。
C++面向对象程序设计
2015年6月27日星期六
8.3.3 二进制模式的文件I/O
在二进制模式下,文件的I/O将利用write和 read函数将所有数据以字节形式储存至文件里 。
占有文件空间的方式都与其储存在内存中的方式相同,因
此,在储存数字时使用二进制模式是比较合适的。
C++面向对象程序设计
2015年6月27日星期六
8.3.2 格式化文字模式的文件I/O
文件的最小单位为字符,由字符组成一个字段, 好几个字段组成一个记录,而一个文件则由好几 笔记录组成。
将数据输入输出到文件中,除了可以使用write和
中国水利水电出版社
C++面向对象程序设计(第二版)
主编 曹静
C++面向对象程序设计(第二版)
第八章 数据流与文件的输入/输出
第八章
数据流与文件的输入/输出
I/O流的概念 数据流的控制
8.1 8.2
8.3
文件的输入/输出
项目设计7 校园信息管理系统中的数 据存储
C++面向对象程序设计
2015年6月27日星期六
int istream::peak()
如果输入流包括附加的数据,函数返回下一个接收的字符; 否则它返回EOF。
字符c被送到输入流。它将是下一个要接收的字符。函数返 回一个对*this的引用。
istream& istream::unget(char c)
库iostream还提供对ios成员函数的访问,一些程序在 输入流中检测文件尾。 bool ios::eof()
功能说明 以mode模式打开名为filename的文件 关闭文件
函 数 open(filename,mode) close()
is_open()
write(str,size)
检查文件是否为打开状态,是则返回真 ,否则返回假
将str数组中size个字符写入到文件中
read(str,size)
从文件中读取数据至文件结尾,并设定 给str数组,但至多不超过size个字符
中放入set序设计
2015年6月27日星期六
8.2.1 数据流的格式控制
2.对齐方式
输出流的默认对齐方式为文本右对齐,程序中可 以用setiosflags和resetiosflags操作符重设对 齐方式。
3.精度
使用setprecision操作符改变精度,该操作符有 两个标志,ios::fixed和ios::scientific。 可以用dec、oct和hex操纵符设置输入和输出的默 认进制。
2015年6月27日星期六
8.2.3 数据流的错误侦测
如果出于效率的缘故,则有必要缓冲错误和 系统状态消息,这样就应该使用带缓冲的错 误流clog。像cerr一样,clog通常是定向到 显示器。下面给出几个样例:
clog<<UserName<<"成功登陆!\n"; clog<<"有新邮件!\n";
在ios类里,定义了三个特定的文件指针。通过指针 函数与特定的指针的配合使用,可供在处理文件I/O 时移动文件指针之用。这三个位移指针分别是 ios::beg(文件开头)、ios::end(文件结尾)、 ios::cur(当前的指针位置)。
C++面向对象程序设计
2015年6月27日星期六
8.3.4 文件指针的使用
文件指针函数 seekg(pos,seek_dir)
pos=tellg() seekp(pos,seek_dir)
pos=tellp()
C++面向对象程序设计
2015年6月27日星期六
项目设计7 校园信息管理系统中的数据存储
1 设计题目
校园信息管理系统中的数据存储
2 设计概要
要求掌握面向对象程序设计方法,I/O 流的概念,以及如何利用文件存储对象。
表8-1 文件流的文件打开模式
功 能 文件打开为读取(输入)状态,此为istream类的默认模式参数 文件打开为写入(输出)状态,此为ostream类的默认模式参数 打开一个现存文件,从文件结尾处读取(输入)或写入(输出) 打开一个输出文件从文件结尾写入(输出)数据
ios::trunc
ios::nocreate ios::noreplace ios::binary
名称,另一个传入打开该文件的模式参数。
file.open("MyFile.txt",ios::in); // 在读取模式下打开MyFile.txt文件
C++面向对象程序设计
2015年6月27日星期六
8.3.1 fstream类
模式参数 ios::in ios::out ios::ate ios::app
istream& istream::getline(char s[],int n,char delim='\n')
从输入流获取字符并将它们分配给s直到下面的一个条件发 生:取得n-1个字符,没有输入字符了,或者下一个接收的 字符的值为delim。
C++面向对象程序设计
2015年6月27日星期六
8.2.2 常用的输入/输出函数
8.1 I/O流的概念
流是一种抽象,它负责在数据的生产者和数据的消费者之 间建立联系,并管理数据的流动。
当程序与外界环境进行信息交换时,存在着两个对象,一 个是程序中的对象,另一个是文件对象。
程序建立一个流对象,并指定这个流对象与某个文件对象 建立连接,程序操作流对象,流对象通过文件系统对所连
fstream类可以用于将数据写入文件,或读取文件的数据 。要使用fstream类执行文件的I/O时,首先必须先定义一 个fstream类的对象。例如:
fstream
file;
// 定义一个fstream对象
利用fstream所提供的open成员函数 ,打开一个文件。传 入open函数的参数有两个,一个传入欲打开的磁盘文件的
8.2.3 数据流的错误侦测
流cerr和clog把显示输出到默认错误日志 上,该日志通常是控制台显示器。
对流cerr的每个插入请求应该立即送出显示 。下面给出几个错误消息的例子:
cerr<<"系统将在10秒后重起!\n"; cerr<<"输入值无效,请重新输入!\n";
C++面向对象程序设计
C++面向对象程序设计
2015年6月27日星期六
8.3.1 fstream类
C++的文件I/O模式分为两种,一种为格式化文字模式,另 一种为二进制模式,默认的文件I/O模式为文字模式。
当使用格式化文字模式时,输出至文件的内容将被储存为
字符,因此,格式化文字模式适合储存字符或字符串。
如果以二进制的方式处理数字,不论是储存的方式,还是
如果流中达到文件尾则返回真;否则函数返回假。
C++面向对象程序设计
2015年6月27日星期六
8.2.2 常用的输入/输出函数
库iostream还提供两个类似get()和getline()的 ostream成员函数。
ostream& ostream::put(char c)
将字符c插入输入流中。函数返回一个对*this的引用。 将s中的n个字符插入到输入流中。空字符也是有效的。函数 返回一个对*this的引用。
打开一个文件,如果它已经存在,就删除其中原有的内容
如果一个文件存在则打开它,否则该操作失败 如果一个文件不存在则作为新文件打开它;如果文件已存在,则 该操作失败 以二进制模式打开一个文件,默认是文本模式
C++面向对象程序设计
2015年6月27日星期六
8.3.1 fstream类
表8-2 文件处理函数
8.2.1 数据流的格式控制
插入(<<) 和提取(>>)运算符是为所有标准 C++数据类型定义的,其作用是向流中传送和读
取数据。插入和提取运算符与预先定义的操作符
一起工作,用来控制输入和输出格式。
1.输出宽度
为了调整输出时的显示宽度,可以通过调用width 成员函数为每个项(item)指定输出宽度或在流
接的文件对象产生作用。
读操作在流数据抽象中被称为(从流中)提取,写操作被 称为(向流中)插入。
C++面向对象程序设计
2015年6月27日星期六
8.2
数据流的控制
8.2.1 数据流的格式控制 8.2.2 常用的输入/输出函数 8.2.3 数据流的错误侦测
C++面向对象程序设计
2015年6月27日星期六
C++面向对象程序设计
2015年6月27日星期六
8.3
文件的输入/输出
8.3.1 fstream类 8.3.2 格式化文字模式的文件I/O 8.3.3 二进制模式的文件I/O 8.3.4 文件指针的使用
C++面向对象程序设计
2015年6月27日星期六
8.3.1 fstream类
C++里负责文件输入/输出的类主要有ifstream(文件输入) 、ofstream(文件输出)以及fstream(文件输入/输出)。
C++面向对象程序设计
2015年6月27日星期六
4 功能模块设计
在设计person、student和teacher类的时候,已经 添加了用来将数据写入文件和读出文件的函数:
void Save(ofstream* ofile);