C++ IO库之学习笔记(第八章)

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::inios::outios::w:app   从文件末尾开始写
ios::binary   二进制模式
ios::trunc   打开一个文件,然后清空内容
ios::ate  打开一个文件,将位置移动到文件尾.
ios::inios::outios::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模式, 使其不会清空文件内容,如果,文件不存在,则创建文件.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值