簡體   English   中英

ifstream::rdbuf() 實際上是做什么的?

[英]What does ifstream::rdbuf() actually do?

我有以下代碼,它工作得很好(除了它很慢,但我不太關心這一點)。 將 infile 的全部內容寫入 outfile 似乎並不直觀。

// Returns 1 if failed and 0 if successful
int WriteFileContentsToNewFile(string inFilename, string outFilename)
{
    ifstream infile(inFilename.c_str(), ios::binary);
    ofstream outfile(outFilename.c_str(), ios::binary);

    if( infile.is_open() && outfile.is_open() && infile.good() && outfile.good() )
    {
        outfile << infile.rdbuf();

        outfile.close();
        infile.close();
    }
    else
        return 1;

    return 0;
}

任何見解?

iostream類只是 I/O 緩沖區的包裝器。 iostream本身並沒有做很多事情……主要是,它提供了operator>>格式化操作符。 緩沖區由從basic_streambuf派生的對象提供,您可以使用rdbuf()獲取和設置該對象。

basic_streambuf是一個抽象基礎,具有許多虛函數,這些虛函數被覆蓋以提供用於讀/寫文件、字符串等的統一接口。函數basic_ostream<…>::operator<<( basic_streambuf<…> )被定義為保持讀取緩沖區,直到底層數據源耗盡。

iostream是一團糟。

是的,它在標准中有規定,實際上很簡單。 rdbuf()只是返回一個指向給定[io]stream對象的基礎basic_streambuf對象的指針。

basic_ostream<...>具有用於過載operator<<指針是指向basic_streambuf<...>其中寫出的內容basic_streambuf<...>

快速查看源代碼表明basic_ofstreambasic_filebuf的包裝器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM