C++ 輸入輸出重新導向

來源:互聯網
上載者:User

C++中流(stream)是一個對象,所以任何有流這種行為的對象也是流對象。

流主要分為三種類型:

  • istream: 主要是從流中執行輸入操作
  • ostream:主要是從流中執行輸出操作
  • iostream:主要是從流中執行輸入輸出操作

每個流對象都關聯一個流buffer,程式一般從buffer中讀取資料,所以如果要重新導向流,只需要把buffer對象指向另外一個流即可。

所有的流對象都關聯了一個類成員資料streambuf,它就是stream的緩衝區(buffer)。C++讀取輸入輸出的時候是從buffer中讀取,而不是來源資料流讀取。

我們執行重新導向操作使用ios::rdbuf()方法。對於這個方法,如果不傳參數,那麼直接返迴流對象的buffer指標。如果傳遞了某個流對象的buffer指標,那麼將當前的流對象綁定到那個傳遞過來的流對象的buffer上。

例子:

stream_object.rdbuf(); //返迴流對象bufferstream_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;}

  

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.