当前课程知识点:C++语言程序设计进阶 > 第十一章 流类库与输入/输出 > 输入流 > 输入流概述
istream类最适合用于顺序文本模式输入。cin是其实例。
ifstream类支持磁盘文件输入。
istringstream
如果在构造函数中指定一个文件名,在构造该对象时该文件便自动打开。 ifstream myFile("filename");
在调用默认构造函数之后使用open函数来打开文件。 ifstream myFile; //建立一个文件流对象 myFile.open("filename"); //打开文件"filename”
打开文件时可以指定模式 ifstream myFile("filename", iosbase::in | iosbase::binary);
提取运算符(>>)对于所有标准C++数据类型都是预先设计好的。
是从一个输入流对象获取字节最容易的方法。
ios类中的很多操纵符都可以应用于输入流。但是只有少数几个对输入流对象具有实际影响,其中最重要的是进制操纵符dec、oct和hex。
open 把该流与一个特定磁盘文件相关联。
get 功能与提取运算符(>>)很相像,主要的不同点是get函数在读入数据时包括空白字符。
getline 功能是从输入流中读取多个字符,并且允许指定输入终止字符,读取完成后,从读取的内容中删除终止字符。
read 从一个文件读字节到一个指定的内存区域,由长度参数确定要读的字节数。当遇到文件结束或者在文本模式文件中遇到文件结束标记字符时结束读取。
seekg 用来设置文件输入流中读取数据位置的指针。
tellg 返回当前文件读指针的位置。
close 关闭与一个文件输入流关联的磁盘文件。
大家好
欢迎继续学习C++语言程序设计
这一节呢
我为大家概要性地介绍一下
输入流类
在C++中
有三个最重要的输入流类
这三个最重要的输入流类呢
是istream
这个类最适合用于
顺序文本模式的输入
像我们已经熟悉的cin
就是这个类的一个实例
这个类的一个预定义好的对象
另外呢
我们还可以使用ifstream
去进行磁盘文件的输入
istringstream呢
是用来从内存中的一个字符串中
输入信息的
这种字符串输入流类
要使用输入流类
那首先就需要构造
输入流类的对象
构造输入流类的对象呢
也有两种不同的办法
一种是在构造
这个ifstream对象的同时
在这个参数表中
给出一个实际的文件名作参数
这样呢
在构造这个输入流类对象的同时
就将这个对象
与文件关联起来了
也就是同时将这个文件打开了
像这样关联和打开完了以后呢
我们立刻就可以用
这个输入流对象去操纵某个
文件的输入的时候呢
可以用它的open函数
去打开这个文件
打开文件的同时呢
也就将这个文件
与这个ifsteam对象关联起来了
然后我们就可以用这个对象
比如说这里面的这个myFile
去从文件中读取信息了
不管是我们在构造对象时
直接给出文件名
还是在构造了对象以后
再关联和打开文件
我们都可以指定文件的模式
文件的打开模式呢
就是ios_base里面预定义好的
这些常量
像ifsream
这个输入文件流类的对象
它打开文件的时候
打开模式
默认就是ios_base::in
它是默认是输入方式
所以这个in它可以缺省 不写
另外你可以指定
如果是二进制文件的话
你可以指定它是binary的
这些可以共存
用按位或操作把它连接起来
就可以了
如果我们打开的文件
是个文本文件
这个时候我们就可以使用
提取运算符
从文本文件中输入
这是最方便的一种输入方式
那么大家在前面的习题中
已经学会了用提取运算符
从键盘输入信息
实际上
键盘呢也被系统看作
一个文本文件
提取运算符呢
对于所有C++的标准数据类型
都是预先重载好了的
都可以作用于标准的数据类型
如果我们需要使提取运算符
能够作用于类的对象
我们就要为这个类
去重载提取运算符
那么这个时候
只能重载为类外的非成员函数
提取运算符呢
它是从一个输入流对象
获取字节的最容易的方法
ios中的很多操纵符呢
都可以用于输入流
但是其中只有少数几个
对输入流对象
具有实际的影响
其中最重要的就是进制操纵符
也就是说你可以指定
是按照十进制 八进制
还是十六进制输入数据
那么其他更多的
控制格式的操纵符呢
我不建议大家
在进行提取运算的时候去使用
为什么呢
因为通常来讲
输入数据的时候
你的格式控制越简单越好
如果你对输入数据的格式要求得过于复杂
那么用户从键盘输入
就感觉到比较麻烦
或者准备
这个用于输入的
磁盘上的文本文件的时候呢
也会觉得规定太多了
要求太多了 比较麻烦
所以一般来讲呢
输入尽量少用各种格式控制
要通过输入流对象输入数据呢
除了我们用提取运算符
输入文本文件中的数据以外呢
我们还可以利用
输入流类的成员函数
来完成各种不同的输入功能
现在我们就看一下
输入流相关的函数有哪些
那么输入流相关的函数呢
首先就是我们已经看到的
这个open函数
它是打开文件
实际上呢它是将流
与一个特定的磁盘文件
相关联的过程
另外get函数的功能呢
是与提取运算符的功能很像
是从输入文件中提取信息
那么不同的特点是
get函数在读入数据的时候
可以包括空白符
而提取运算符呢
它是以空白符为分隔符的
遇到空白符就停止了
另外还有getline
它可以整行读入
就看它的名字getline
它可以读取多个字符
并且以什么字符为终止符
它是可以定制的
我们可以指定终止符是什么
那么读取完成以后呢
会从读取的内容中
删除这个终止符
还有用于读二进制文件的函数
read函数
read成员函数呢
从一个文件中读字节
到一个指定的内存区域
到底读多少字节呢
读的长度是由长度参数确定的
那么这样的二进制读
可以跟我们前面学过的二进制写
相配合
如果某一段信息
当初是用write写到文件中去的
一般来说
以后在读出的时候
我们会对应地用read
给它读到内存中来
使用read函数的时候
如果给出了长度参数
那么当遇到文件结束
或者在文本模式中
遇到文件结束标记字符的时候
那么就会结束这个读取
也就是说
不管读不读得到指定的长度
遇到了文件结束
那么就会停止读取
seek函数呢
是用来设置文件输入流中
读取数据位置的指针的
一个打开的用于读目的的文件
它内部是有一个指针
指向下一个将要读取的位置
而这个seekg这个函数呢
就可以移动这个指针
按我们的要求
从指定的字节数开始读取
tellg函数呢
会返回当前文件读指针的位置
当我们完成了需要读的操作以后
不再使用这个文件的时候
大家要记得调用close函数 关闭这个文件
-导学
--导学
-继承的基本概念和语法
-第七章 继承与派生--继承的基本概念和语法习题
-继承方式
-第七章 继承与派生--继承方式
-基类与派生类类型转换
-第七章 继承与派生--基类与派生类类型转换
-派生类的构造和析构
--派生类的构造函数
--派生类的析构函数
--第七章 继承与派生--派生类的构造和析构
-派生类成员的标识与访问
--虚基类
-第七章 继承与派生--派生类成员的标识与访问
-小结
--小结
-综合实例
--第七章综合实例
-实验七
--实验七
-导学
--导学
-第八章 多态性--导学
-运算符重载
--运算符重载的规则
-第八章 多态性--运算符重载
-虚函数
--虚函数
--虚析构函数
--虚表与动态绑定
-第八章 多态性--虚函数
-抽象类
--抽象类
--第八章 多态性--抽象类
-override与final
-第八章 多态性--override与final
-小结
--第八章小结
-综合实例
--第八章综合实例
-实验八
--实验八
- 第八章讲义
-导学
--导学
-模板
--函数模板
--类模板
-第九章 模板与群体数据--模板
-线性群体
--线性群体的概念
-第九章 模板与群体数据--线性群体
-数组
--数组类模板
-链表
--链表类模板
-第九章 模板与群体数据--链表
-栈
--栈类模板
--栈类模板课后习题
--例9-9 栈的应用课后习题
-队列
--队列类模板
-第九章 模板与群体数据--队列
-排序
--排序概述
--插入排序
--选择排序
--交换排序
-第九章 模板与群体数据--排序
-查找
--查找
--查找课后习题
-小结
--小结
-综合实例
--综合实例
-实验九
--实验九
- 第九章讲义
-导学
--导学
-泛型程序设计及STL的结构
--STL简介
-第十章 泛型程序设计与C++标准模板库--泛型程序设计及STL的结构
-迭代器
--迭代器
-第十章 泛型程序设计与C++标准模板库--迭代器
-容器的基本功能与分类
-第十章 泛型程序设计与C++标准模板库--容器的基本功能与分类
-顺序容器
--顺序容器的特征
--第十章 泛型程序设计与C++标准模板库--顺序容器
-关联容器
--集合
--映射
-第十章 泛型程序设计与C++标准模板库--关联容器
-函数对象
--函数对象
--函数适配器
-算法
--算法
-小结
--第十章小结
-综合实例
--综合实例
-实验十
--实验十
- 第十章讲义
-导学
--导学
-I/O流的概念及流类库结构
-第十一章 流类库与输入/输出--I/O流的概念及流类库结构
-输出流
--输出流概述
--向文本文件输出
--向二进制文件输出
--向字符串输出
-第十一章 流类库与输入/输出--输出流
-输入流
--输入流概述
--输入流应用举例
--从字符串输入
-第十一章 流类库与输入/输出--输入流
-输入/输出流
--输入/输出流
-第十一章 流类库与输入/输出--输入/输出流
-小结
--小结
-综合实例
--综合实例
-实验十一
--实验十一
- 第十一章讲义
-导学
--第12章导学
-异常处理的思想与程序实现
-第十二章 异常处理--异常处理的思想与程序实现
-异常处理中的构造与析构
-第十二章 异常处理--异常处理中的构造与析构
-标准程序库异常处理
-第十二章 异常处理--标准程序库异常处理
-小结
--第12章小结
-综合实例
--综合实例
-实验十二
--实验十二
- 第十二章讲义