imJaron的博客

锲而舍之, 朽木不折; 锲而不舍, 金石可镂

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++中使用的是底层的流缓冲,效率更高
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/imJaron/article/details/53995059
文章标签: C++ rdbuf
个人分类: C++
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

rdbuf()

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭