C++ Primer 第五版 第8章类 8.2——文件输入和输出
目录
8.2 文件输入和输出
fstream头文件
fstream特有的操作
输出文件(写入文件)
输入文件(读取文件)
成员函数open和close
流状态检查和is_open()
文件模式
程序实例
8.2 文件输入和输出
fstream头文件
头文件fstream定义了三个类型来支持文件IO:(1)ifstream从一个给定文件读取数据;(2)ofstream向一个给定文件写入数据;(3)fstream可以读写给定文件
fstream特有的操作
fstream特有的操作 |
|
fstream fstrm |
创建一个未绑定的文件流 |
fstream fstrm(s) |
创建一个fstream,并打开名为s的文件。默认的文件模式mode依赖于fstream的类型 |
fstream fstrm(s,mode) |
与前一个构造函数类似,但按指定mode打开文件 |
fstrm.open(s) |
打开名为s的文件,并将文件与fstrm绑定,默认的文件mode依赖于fstream的类型,返回void |
fstrm.close() |
关闭与fstrm绑定的文件,返回void |
fstrm.is_open() |
返回一个bool值,指出与fstrm关联的文件是否成功打开且尚未关闭 |
输出文件(写入文件)
写入文件的一般步骤:
(1)创建一个ofstream对象流,对象流都会定义一个open成员函数;
(2)将该对象与特定的文件关联起来,即关联一个文件:
(3)以使用cout的方式使用该对象流,唯一区别是输出将进入文件,而不是屏幕;
如下例子创建对象流和关联文件:
第一种方式,创建对象流时就关联文件,open函数会被自动调用:
ofstream out(file); //自动调用open函数将out对象流和file关联起来
第二种方式,创建空对象流,调用open函数关联文件:
ofstream out; //创建空对象流out
out.open(file); //调用open函数关联file文件
小贴士!!!
默认模式打开文件进行输出将自动打开文件的长度截为零,即删除已有内容。 (细节!!)
输入文件(读取文件)
读取文件的一般步骤:
(1)创建一个ifstream对象流,对象流都会定义一个open成员函数;
(2)将该对象与特定的文件关联起来,即关联一个文件;
(3)以使用cin的方式使用该对象流;
如下例子创建对象流和关联文件:
第一种方式,创建对象流时就关联文件,open函数会被自动调用(文件名初始化文件流对象):
ifstream in(file); //自动调用open函数将in对象流和file关联起来
第二种方式,创建空对象流,调用open函数关联文件:
ifstream in; //创建空对象流in
in.open(file); //调用open函数关联file文件
成员函数open和close
对象流都有一个open和close成员函数,
open用来打开某个文件,将文件流和文件关联起来
close用来断开对象流和文件的关联。如果一个文件流想要关联另一个文件,则需要先断开已经关联的文件,如:
ifstream in; //创建空对象流in
in.open(file); //调用open函数关联file文件
in.close(); // 关闭文件
in.open(ifile+"2") // 打开另一个文件
流状态检查和is_open()
打开文件时,对open状态是否成功检查是一个好习惯,有时候可能调用open失败,较新的c++检查文件是否被打开的方法——is_open()方法
以前检查文件是否被成功打开的方式(尽量用is_open):
(1)if(in.fail())...
(2)if(!in.good())...
(3)if(!in)...
文件模式
每个流都有一个关联的文件模式,用来指出如何使用文件,下表列出了文件模式及其含义:
文件模式 |
|
in |
读方式打开 |
out |
写方式打开 |
app |
每次写操作前均定位到文件末尾 |
ate |
打开文件后立即定位到文件末尾 |
trunc |
截断文件 |
binary |
二进制方式进行IO |
程序实例
下边是实现一个程序,完成输入和输出操作,程序主要功能:
(1)首先显示文件当前内容(如果有的话)
(2)程序以app模式打开,进行写操作
(3)程序进行读操作,显示文件内容
# include<iostream>
# include<fstream>
# include<string>
using namespace std;int main()
{//读取初始文件内容,并输出显示ifstream in;in.open("guest.txt");char ch;if (in.is_open()){cout << "Here are the current contents of thepeople.text's file:" <<endl;while (in.get(ch))cout << ch;cout << endl;in.close();}// 添加内容到文件ofstream out;out.open("D:guest.txt", ofstream::app); //out.open("people.txt", ios_base::app);if (!out.is_open()){cout << "failed to open file" << endl;}cout << "Please enter content:";string str;while (getline(cin, str) && str.size() > 0){out << "\n"<<str << endl;}out.close();//读取修改后的文件内容,并输出显示in.open("guest.txt");if (in.is_open()){cout << "Here are the revised contents of the people.text's file:" << endl;while (in.get(ch))cout << ch;cout << endl;in.close();}return 0;}
第一次运行,因为不存在guest.txt文件,所以读取失败,直接进行写操作和输出操作
第二次运行,文件已经存在,则进行读-写-读操作
C++ Primer 第五版 第8章类 8.2——文件输入和输出相关推荐
- C++ Primer 第五版 第7章类 7.1——类讲解(成员函数、非成员函数、构造函数)习题答案
理论讲解请参考:C++ Primer 第五版 第7章类 7.1--类讲解(成员函数.非成员函数.构造函数) 目录 7.1 定义抽象数据类型习题答案 7.4&7.5 7.6&7.7 7. ...
- C++ Primer 第五版 第7章类 7.1——类讲解(成员函数、非成员函数、构造函数)
习题答案请参考:C++ Primer 第五版 第7章类 7.1--类讲解(成员函数.非成员函数.构造函数)习题答案 目录 7.1 类讲解(成员函数.非成员函数.构造函数) 成员函数 this cons ...
- C++ Primer(第五版)第七章 类 部分答案
第七章 类 练习7.2 练习7.3 练习7.4 练习7.6 练习7.7 练习7.9 练习7.14.7.15.7.22 练习7.23.7.24.7.26 练习7.27 练习7.2 曾在 2.6.2 节的 ...
- C++ Primer 第五版 第6章——函数阅读笔记及习题答案(完整,附C++代码)
C++Primer(第五版)第6章函数的阅读笔记及课后习题答案总结,课后习题答案是自己学习写出来的,如果有误,欢迎指正 还不完整,后续会更新添加 阅读笔记 C++ Primer 第五版 第6章 6.1 ...
- C++ Primer 第五版 第6章 6.7——函数指针习题答案
理论请参考:C++ Primer 第五版 第6章 6.7--函数指针阅读笔记 目录 6.7 函数指针习题答案 6.54 6.55 6.56 6.7 函数指针习题答案 6.54 vector是指向该函数 ...
- C++ Primer 第五版 第6章 6.7——函数指针阅读笔记
习题答案请参考:C++ Primer 第五版 第6章 6.7--函数指针习题答案 目录 6.7 函数指针 使用函数指针 返回指向函数的指针 6.7 函数指针 声明一个函数指针,只需要用指针替代函数名即 ...
- C++ Primer 第五版 第6章 6.3——函数返回类型和return语句阅读笔记
习题答案请参考:C++ Primer 第五版 第6章 6.3--函数返回类型和return语句习题答案 目录 6.3 返回类型和return语句 6.3.1 无返回值函数 无返回值函数的特性 6.3. ...
- C++ Primer 第五版 第6章 6.3——函数返回类型和return语句习题答案
理论讲解请参考:C++ Primer 第五版 第6章 6.3--函数返回类型和return语句阅读笔记 目录 6.31 6.32 6.33 6.34 6.35 6.36 6.38 6.31 返回引用无 ...
- C++ Primer 第五版 第6章 6.2——函数参数传递习题答案
理论讲解请参考:C++ Primer 第五版 第6章 6.2--函数参数传递阅读笔记 目录 6.10 指针形参交换两个数 6.12 引用形参交换两个数 6.13 6.14 6.15 6.16 6.17 ...
最新文章
- POJ - 1986 Distance Queries 倍增求LCA
- 状态机在计算机中的应用
- numpy 中的 random.rand() 函数
- 在虚拟机上安装Docker并运行Nginx
- 脑与认知科学1 脑的基本结构下
- 在vue-cli中搭建mock服务器
- 枚举操作的常用方法,包括获得枚举的value,name,description
- Jfinal源码解析系列一
- php检测表大小,查询mysql数据库、表的大小
- 虚拟机安装docker_Docker 从入门到放弃:新手学习笔记(上)
- 潘石屹没跑,他去学 Python 了
- python爬虫练习2:取道指成分股数据
- @click.prevent.native作用
- 原来微信还有隐藏代码,80%的用户还不知道!(附表白代码)
- 测试按键延迟软件,怎么测试键盘延迟-灵猫键盘DIY大师测试键盘响应速度的方法 - 河东软件园...
- 那个找不到工作的iOS程序猿
- 用Python写个开心消消乐小游戏!自己写的游戏就是好玩!
- python实现牛顿法_牛顿法和最速下降法的Python实现
- 百科知识 ass文件如何打开
- 关于 android 虚拟机显示在了界面里面,怎么把模拟器放到到android studio窗口外面这件事
热门文章
- java web 生命周期_JavaWeb的生命周期
- mysql 批量建表_mysql 如何实现循环批量插入?
- 【windows】windows 11 安装解决 这台电脑无法运行 Windows 11
- mysql面试关联查询语句_sql语句多表联查语句的练习(面试题)
- aix系统下oracle之ora-00471,Oracle RAC 9.2.0.7 (AIX53,HA52)三台主机实例全down的问题
- java 强制走catch_java – IDE强制使用try / catch包围但不抛出异常
- java 线程同步的list_java线程生产者与消费者实例(使用List实现同步)
- VS CODE Python开发环境配置
- 解题:HNOI 2008 玩具装箱
- uboot——之初体验