zoukankan      html  css  js  c++  java
  • C++ 输入输出重定向

    C++中流(stream)是一个对象,所以任何有流这种行为的对象也是流对象。

    流主要分为三种类型:

    • istream: 主要是从流中执行输入操作
    • ostream:主要是从流中执行输出操作
    • iostream:主要是从流中执行输入输出操作

    每个流对象都关联一个流buffer,程序一般从buffer中读取数据,所以如果要重定向流,只需要把buffer对象指向另外一个流即可。

    所有的流对象都关联了一个类成员数据streambuf,它就是stream的缓冲区(buffer)。C++读取输入输出的时候是从buffer中读取,而不是源数据流读取。

    我们执行重定向操作使用ios::rdbuf()方法。对于这个方法,如果不传参数,那么直接返回流对象的buffer指针。如果传递了某个流对象的buffer指针,那么将当前的流对象绑定到那个传递过来的流对象的buffer上。

    例子:

    stream_object.rdbuf(); //返回流对象buffer
    stream_object.rdbuf(streambuf * p); //绑定流对象buffer
    

    实际操作:

    // cout 重定向到文件
    #include <fstream>
    #include <iostream>
    #include <string>
     
    using namespace std;
     
    int main()
    {
        fstream file; // 定义fstream对象
        file.open("D:cout.txt", ios::out); // 打开文件,并绑定到ios::out对象
        string line;
     
        // 先获取cout、cin的buffer指针
        streambuf *stream_buffer_cout = cout.rdbuf();
        streambuf *stream_buffer_cin = cin.rdbuf();
     
        // 获取文件的buffer指针
        streambuf *stream_buffer_file = file.rdbuf();
     
        // cout重定向到文件
        cout.rdbuf(stream_buffer_file);
     
        cout << "This line written to file" << endl;
     
        // cout重定向到cout,即输出到屏幕
        cout.rdbuf(stream_buffer_cout);
        cout << "This line is written to screen" << endl;
     
        file.close(); // 关闭文件
        return 0;
    }
    

      

  • 相关阅读:
    【二食堂】Alpha
    【二食堂】Alpha- 发布声明
    【Beta】Scrum Meeting 4
    【Beta】Scrum Meeting 3
    【Beta】Scrum Meeting 2
    【Beta】Scrum Meeting 1
    beta设计和计划
    alpha事后分析
    alpha项目展示
    Scrum Meeting 最终总结
  • 原文地址:https://www.cnblogs.com/ranwuer/p/9550010.html
Copyright © 2011-2022 走看看