[英]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_ofstream
是basic_filebuf
的包装器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.