rdbuf()

我们使用STL编程的时候有时候会想到把一个流对象指向的内容用另一个流对象来输出,比如想把一个文件的内容输出到显示器上,我们可以用简单的两行代码就可以完成。 

ifstream infile("test.txt");

cout << infile.rdbuf();


上面的代码就把infile流对象中的流重定向到标准输出cout上,您可以在屏幕上看到test.txt的内容。


下面的例子来自MSDN,清晰的描述了rdbuf函数的使用方法

// basic_ios_rdbuf.cpp
// compile with: /EHsc

#include
#include
#include

int main( )
{

    using namespace std;


    ofstream file( "rdbuf.txt" );
    streambuf *x = cout.rdbuf( file.rdbuf( ) );

    cout << "test" << endl;

    // Goes to file cout.rdbuf(x);
    cout << "test2" << endl;
}


rdbuf函数有两种调用方法


basic_streambuf<Elem, Traits> *rdbuf( ) const;
basic_streambuf<Elem, Traits> *rdbuf( basic_streambuf<E, T> *_Sb);


1)无参数。返回调用者的流缓冲指针。
2)参数为流缓冲指针。它使调用者与参数(流缓冲指针)关联,返回自己当前关联的流缓冲区指针。


int main()
{
   fstream fin("1.mp3",ios::in|ios::binary);

  if(!fin.is_open())
  {
    cout << "源文件打开失败" << endl;
    return 0;
  }

  fstream fout("2.mp3",ios::out|ios::binary);

  if(! fin.is_open())
  {
    cout << "目标文件打开失败!" << endl;
    return 0;
  }

  fout<<fin.rdbuf();

  fin.close();
  fout.close();

  return 0;
}   


程序通过把源文件的流重定向到关联到目的文件的流对象,通过 fout<<fin.rdbuf();一句代码就完成了在C语言中的循环读写缓冲区的功能,而且C++中使用的是底层的流缓冲,效率更高
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值