为什么 ofstream::rdbuf() 总是为空
Why ofstream::rdbuf() is always empty?
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()
总是空的,还是不应该这样使用?
实际用途:使用同一标头(例如调色板(写入多个文件的应用程序。在此代码示例中,data
(调色板(的内容是静态的,但它显然可以用更复杂的计算代替,对于每个输出文件重复计算是多余的......
您的问题是ofstream
默认情况下仅在输出模式下打开其缓冲区,无论哪种方式,您都只传递std::ios_base::out
,这意味着无法从中读取缓冲区。
要解决此问题,您需要切换到使用fstream
并使用 std::ios_base::in | std::ios_base::out | std::ios_base::binary
打开它。
在通过调用 rdbuf
之前,您还需要查找文件的开头 seekg(0, std::ios_base::beg)
。
相关文章:
- 为什么缓冲区的内容在读取空 rdbuf 时被删除?
- std::ofstream 作为类成员删除复制构造函数?
- ofstream::close() 是否在 Linux 上调用同步?
- 如何在软件代码中使用ofstream创建文件
- Ofstream和IFSTREAM有什么区别?
- 使用 libssh 从 SFTP 服务器下载文件并使用 C++ 将其写入 ofstream?
- C++:std::ofstream 方法 open() 在第二次迭代时擦除打开的 ifstream 文件
- fstream / ifstream / ofstream 对象如何转换为布尔值
- 使用 auto_ptr<std::ofstream> 对象
- 传递数组结构、ofstream 和 interger 以运行
- 有没有办法使用 ofstream 保存屏幕截图?
- 使用 ofstream 写入文本文件时断言失败
- rdbuf()->str()在哪里?
- 当 ofstream 指针位于 std::map 中时,文件写入不会发生 C++.
- Ofstream一直给我函数的最后一行,而不是显示所有内容
- 如何将 std::ofstream& 传递给函数参数?
- BigInteger:在 C++ 中使用 ofstream 写入文件时如何将基数更改为 2?
- 数据不是用 ofstream 写入的,即使返回成功也是如此
- ofstream将额外的零字节写入Unix服务器上的文件
- 为什么 ofstream::rdbuf() 总是为空