相关博客目录
C++程序设计基础学习笔记:(1)初识C++语言:从认识变量和常量开始,数据的表示
C++程序设计基础学习笔记:(2)计算:从数据运算开始,数据简单运算
C++程序设计基础学习笔记:(3)分支结构:无处不在的抉择
C++程序设计基础学习笔记:(4)循环结构:周而复始,求同存异
C++程序设计基础学习笔记:(5)数组:实现算法的利器
C++程序设计基础学习笔记:(6)指针:所向披靡的“金箍棒” 魂
C++程序设计基础学习笔记:(7)函数:面向过程的基础
C++程序设计基础学习笔记:(8)文件:让数据流动起来
C++程序设计基础学习笔记:(9)以人为本:用类与对象诠释现实世界
C++程序设计基础学习笔记:(10)从生物遗传说起,取其精华——继承与多态
第8周 文件:让数据流动起来
8.1 输入输出流的基本概念及标准l/O流
流(stream):
是一个抽象的概念,表示信息从源到目的端的流动,数据按顺序从一个对象传送到另一对象。
IO流
输入输出流的任务就是在内存和外部设备之间稳定可靠地传输数据和解释数据。
流类
为了实现数据的输入和输出定义了一个庞大的类库:
标准流
在c++语言中,把键盘和显示器定义为标准设备,而针对标准设备实现的输入与输出操作称为标准流。
标准流对象是在std命名空间中定义的流对象,提供内存与常用外部设备进行数据交互功能。
声明在头文件iostream
]
流和缓冲
在实现输入和输出时,计算机专门为输入输出设备,开辟了一个临时存放信息的区域,称之为缓冲区,引入缓冲的主要目的是为了提高系统的处理效率,这4个标准流中,除了cerr为非缓冲流外,其他三个均为缓冲流;
区别:
非缓冲流:一旦数据输入流中立即进行处理;
缓冲流:只有当缓冲区满以后,或当前输入换行字符时系统才对流中的数据进行处理,通常情况下使用缓冲流;
标准输出流 cout
ostream 类的对象(console output)
通常连向显示器,可以重定向(关联至文件)
在输出流类中重载<<的一组公用成员函数,实现安全便捷的输出基本数据类型,输出自定义类型对象需要单独重载。
cout流在内存中对应开辟了一个缓冲区,用来存放流中的数据。
ostream类的公有成员函数:
标准输入流 cin
istream类的对象,它从标准输入设备(键盘)获取数据,程序中的变量通过流提取符“>>”从流中提取数据。
在istream流类重载中>>的一组公用成员函数
istream&operator>>(基本类型标识符&);流提取符从流中提取数据时通常跳过输入流中的空格、tab键、换行符等空白字符。
只有在输入完数据再按回车键后,该行数据才被送入键盘缓冲区,形成输入流,提取运算符才能从中提取数据。
istream类的公有成员函数
举例1:
举例2:
8.2 文件处理-文本文件
流和文件
文件是由文件名作为标识的一组数据的集合,文件通常放在磁盘上,所以一般又称为磁盘文件,c++提供了两种类型的流,文本流和二进制流。对应的数据文件,也分为两种文本文件和二进制文件。
文本文件:
由字符的ASCII码组成,以字符为单位存取,文本文件,也称为ASCII码文件;(txt)
二进制文件:
由二进制数据组成,以字节为单位存取,二进制文件在传输时,均采用二进制流,二进制流与设备上的输入与输出一一对应。在数据传输时不需要做任何变化。(照片)
文件流
是以外存文件为输入输出对象的数据流。每个文件流都有一个内存缓冲区与之对应
输入文件流:从磁盘文件流向内存的数据
输出文件流:从内存流向磁盘文件的数据
文件操作的基本步骤:
打开文件
建立文件流对象;
流对象与磁盘文件关联;
指定文件的打开方式streamclassfileObj( fileName, openMode) ; fileObj.open( fileName, openMode) ;
- 1
- 2
读/ 写文件
<< , put(), write() >> , get(),getline(), read()
- 1
- 2
关闭文件:解除流对象与磁盘文件关联
fileObj.close( ) ;
- 1
openMode
ios::in:按读(输入)方式,打开文件,若文件不存在,则自动建立新文件;
ios::out:按写(输出)方式,打开文件,若文件不存在,自动建立新文件;
ios::app:打开文件,不删除文件数据,将新数据增加到文件的尾部;
ios::ate:打开文件,使文件读写指针,移到文件末尾;
ios::trunc:打开文件,并清除文件原有数据(默认方式);
ios::nocreate:只能打开已存在文件,如文件不存在则打开失败,
ios::noreplace:建立新文件,如文件已存在,则建立失败;
ios::binary:以二进制的形式打开一个文件;注意:在使用上述打开方式时,可以把多种方式结合起来,一起使用,中间用|连接如ios:out|ios:app表示按写(输出)方式打开文件,并且把新写的数据增加到文件末尾。
打开文件
方法1
调用流类带参数的构造函数,建立流对象时连接外部文件
方法2
先建立流对象,再调用fstream::open()函数连接外部文件
关闭文件
关闭文件操作包括把缓冲区数据完整地写入文件,添加文件结束标志,切断流对象和外部文件的连接;
当一个流对象的生存期结束,系统也会自动关闭文件;
若流对象的生存期没有结束,用close()关闭文件后,该流对象可以重用;
举例1:
检测输入/输出的状态标志
C++中负责的输入/输出的系统包括了关于每一个输入/输出操作的结果的记录信息。这些当前的状态信息被包含在io_state类型的对象中。io_state是一个枚举类型
goodbit:无错误
eofbit:已到达文件尾
failbit:非致命的输入/输出错误
badbit:致使的输入/输出错误通常使用下面任何一个函数来检测相应的输入/输出状态:
bool eof(); //假如操作已经到达了文件末尾(eofbit被标设),则eof()函数返回true. bool fail(); //假如failbit标志被标设,则fail()函数返回true;
- 1
- 2
- 3
- 4
举例2:
8.3 文件处理-二进制文件
二进制文件
二进制文件以基本类型数据在内存的二进制表示形式存放数据,不对写入或读出的数据做格式转换;
打开二进制文件用ios::binary方式;
二进制文件的读写方式由程序控制,并用特定的读写函数;
fstreaminfile,outfile; infile.open(“inf1.txt”,ios::in|ios::binary); outfile.open(“outf1.txt”,ios::out|ios::binary);
- 1
- 2
- 3
二进制文件读写操作
二进制文件的数据不是ASCII码,不能直接对其读写,必须要通过特定的函数予以转换。
输入函数:
Infile.read(char *,int); //char * 数据进入的内存地址,int一次读入的字节数
- 1
输出函数:
Outfile.write(char *,int) //char * 要输出的数据在内存中的地址,int一次输出的字节数
- 1
注意:
在上述两个函数中第一个参数必须为字符型指针;若为其他类型,必须强制性转换为字符型指针。
评论记录:
回复评论: