gpt4 book ai didi

c++ - 为什么 ofstream::rdbuf() 总是空的?

转载 作者:行者123 更新时间:2023-11-28 02:15:10 25 4
gpt4 key购买 nike

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() 总是空的,或者它不应该这样使用?

实际用途:使用相同 header (例如调色板)编写多个文件的应用程序。在这个代码示例中,data(调色板)的内容是静态的,但它显然可以被更复杂的计算所取代,对每个输出文件重复这样的计算就太过分了……

最佳答案

您的问题是 ofstream 默认情况下仅在输出模式下打开其缓冲区,无论哪种方式您都只传递 std::ios_base::out,这表示无法读取缓冲区。

要解决此问题,您需要切换到使用 fstream 并使用 std::ios_base::in | 打开它std::ios_base::输出 | std::ios_base::binary.

在调用 rdbuf 之前,您还需要通过调用 seekg(0, std::ios_base::beg) 查找文件的开头。

关于c++ - 为什么 ofstream::rdbuf() 总是空的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34246686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com