C++ IO库之学习笔记(第八章)
2016-03-13 08:54
204 查看
IO类
iostream定义了用于读写流的基本类型,fstream定义了读写命名文件的类型,sstream定义了读写内存string对象的类型.IO对象无拷贝或赋值
进行IO操作的函数通常以引用方式传递和返回流,读写一个IO对象会改变流的状态,因此传递和返回的引用不能是const的.管理输出缓冲
每个输出流都管理一个缓冲区,用来保存程序读写的数据, 有了缓冲机制,操作系统就可以将程序的多个输出操作组合成单一的系统级操作.刷新缓冲区
程序正常结束,缓冲区刷新被执行.缓冲区满时,需要刷新缓冲区。
使用endl显式的刷新缓冲区.
每个输出操作之后,我们可以用操作符unitbuf设置流的内部状态,来清空缓冲区,默认情况下,cerr是设置unitbuf,因此写到cerr 的内容都是立即刷新的.
一个输出流可能会被关联到另一个流,在这种情况下,会被刷新.
程序崩溃,缓冲区不会被打印.
关联输入和输出流
标准库将cout和cin关联在一起,因此cin >> ival;会导致cout的缓冲区被刷新.看一个关联的例子:
#include<iostream> #include <fstream> using namespace std; int main(int argc,char *argv[]) { ifstream in("test.txt"); streambuf *old_buf=cin.rdbuf(in.rdbuf());//这句话的意思是把cin流重定向到in流,但是rdbuf函数的返回值是调用该函数的流的指针. string s; while(cin >> s){ cout << s<<endl; } cin.rdbuf(old_buf); return 0; }
文件模式
C++fstream读写文件ystruct 2015年12月14日 0 Comments
C++c++
IO类型间的关系:
类型ifstream和istringstream都继承自istream。因此,我们可以像使用istream对象来使用ifstream和istringstream对象,可以对一个ifstream或者istringstream对象调用getline函数,类型ofstream和ostringstream都继承ostream,因此,我们如何使用cout的,就可以同样地使用这些类型的对象.今天,我们只讨论fstream文件流
include
ofstream //文件写操作,内存写入存储设备(文件) 输出流ifstream //文件读操作,存储设备到内存. 输入流
fstream //读写操作,对打开的文件可进行读写. 前两者的结合
1
2
3
4
include
ofstream //文件写操作,内存写入存储设备(文件) 输出流ifstream //文件读操作,存储设备到内存. 输入流
fstream //读写操作,对打开的文件可进行读写. 前两者的结合
文件打开模式:
ios::in 读 ios::out 写 ios::w:app 从文件末尾开始写 ios::binary 二进制模式 ios::trunc 打开一个文件,然后清空内容 ios::ate 打开一个文件,将位置移动到文件尾. ios::in 读 ios::out 写 ios::w:app 从文件末尾开始写 ios::binary 二进制模式 ios::trunc 打开一个文件,然后清空内容 ios::ate 打开一个文件,将位置移动到文件尾.
指定的模式有以下限制
1.只可以对ofstream或者fstream对象设定out模式.
2.只可以ifstream或fstream对象设定为in模式.
3.只有out被设定时,才可以设定为trunc模式.
4.trunc没被设置,才能设置app。在app模式下,默认以写的方式打开.
5.以out模式打开的文件也会被清空,所以,要想保留文件中额内容,同时要指定app模式. 或同时指定in 模式.
ifstream默认以in模式打开,当文件不存在时,打开失败.当然,也可以以ios::out模式打开,这样虽然不会报错,但是,我们并不能向文件中写数据,也就是说,这样做,没有任何意义.
ofstream默认以out和trunc打开,也就是说,当文件存在时,会清空文件的内容,那么,怎样才能使其在文件末尾追加呢,上面提到过,我们可以给ofstream对象加in或app模式, 使其不会清空文件内容,如果,文件不存在,则创建文件.
相关文章推荐
- C++ Exceptinal 类之间的关系
- C++ Exceptional 类的重载、重写(覆盖)和隐藏
- Windows下Eclipse for C/C++的“Launch failed. Binary not found”完美解决方案
- C++第1次实验—复习-函数T 1
- C++ Primer Plus (第六版)之旅 第三章01
- c++的一个求最大公约数和最小公倍数的简单程序,求给点意见!
- c++第一次上机报告2
- c/c++头文件的作用
- c语言:通过指针变量访问整型变量
- C++数列求和
- C++处理异常技巧-try,catch,throw,finally
- C++ const用法 尽可能使用const
- C++学习笔记之多态与虚函数,虚函数表
- vc++中int,char*, float,double,CString之间的类型转换
- c++模板---堆
- C语言中将二维数组作为参数传递给函数的方法
- 我的第一个C++程序
- c++第二次上机作业
- C++ explicit关键字详解
- C/C++中字符串问题汇总