您的位置:首页 > 编程语言 > C语言/C++

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模式, 使其不会清空文件内容,如果,文件不存在,则创建文件.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: