将标准输出流与文件输出流之间的互相关联

int
main() {
    string file_name = "/home/zhihui/Videos/test";
    ofstream local(file_name,std::ios::binary);
    local << "test file." << endl;           //输出到文件
    local << "try somthing bad." << endl;    //输出到文件
    auto cout_buff = std::cout.rdbuf(); // save pointer to std::cout buffer

    std::cout.rdbuf(local.rdbuf()); // substitute internal std::cout buffer with
    // buffer of 'local' object

    // now std::cout work with 'local' buffer
    // you don't see this message
    std::cout << "some message";        //本来输出到屏幕的标准输出流被关联到文件输出流,会显示到文件里

    // go back to old buffer
    std::cout.rdbuf(cout_buff);         //将标准输出流恢复

    // you will see this message
    std::cout << "back to default buffer\n";

    auto fstream_buf = local.rdbuf();

    local.basic_ios<char>::rdbuf(std::cout.rdbuf()); //文件输出流被关联到标准输出流

    local << "try somthing new." << endl;//这时直接输出到屏幕而不是文件


    return 0;
}

文件中输出的信息

test file.
try somthing bad.
some message

 

屏幕输出的信息

back to default buffer
try somthing new.
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值