0
ofstream ofs1("file1.dat", ios::out | ios::binary);
unsigned char data[64] = {0};
ofs1.write((char*) &data, sizeof(data));
if (some_condition)
{
ofstream ofs2("file2.dat", ios::out | ios::binary);
ofs2 << ofs1.rdbuf();// This does not work.
}
unsigned char more_data[32] = {1};
ofs1.write((char*) &more_data, sizeof(more_data));
与预期的一样,file1.dat在执行代码后大小为96字节。但是,file2.dat是0字节,我期望它是64字节。显然ofstream::rdbuf()
总是空的,还是不应该这样使用?为什么ofstream :: rdbuf()总是空的?
实际用途:使用相同标题(例如调色板)写入多个文件的应用程序。在这个代码示例中,data
(调色板)的内容是静态的,但它显然可以被更复杂的计算所取代,这对于每个输出文件都是重复过度的。
'这不行。'它是'ofstream',底层缓冲区无法读取。 – user657267
但是,在刷新缓冲区内容之前,必须有一些方法来复制缓冲区内容? – Midas
@Midas:它不打算从中读取。仅仅存在缓冲区和知识的内容就是不应该暴露的实现细节。您可以编写自己的包装缓冲区,以记录发送给它的信息。 –