如何使用std :: filebuf将数据(二进制模式)写入文件?

时间:2018-03-06 19:42:19

标签: c++ filebuf

请检查以下代码:

#include <iostream>
#include <string>
#include <fstream>

int main()
{
    char mybuffer[512];
    std::filebuf* optr = new std::filebuf();
    optr->pubsetbuf(mybuffer, 512);
    const char sentence[] = "Sample sentence";
    auto ptr = optr->open("bd.bin", std::ios::binary | std::ios::trunc | std::ios::out);
    if (ptr) {
        float fx = 13;
        auto n = optr->sputn(sentence, sizeof(sentence) - 1);
        n += optr->sputn(reinterpret_cast<const char*>(&fx), sizeof(fx));
        optr->pubsync();
    }
    optr->close();
    if(optr) { delete optr; }
    return 0;
}

运行此程序没有数据已写入文件sputn - &gt; n返回有效数量的writtne字符(通过调试验证)。

2 个答案:

答案 0 :(得分:0)

您的代码在我的系统上正常运行,生成一个包含19个字符的bd.bin

你确定这正是你构建和运行的吗?也许您正在使用有问题的编译器,或者您没有磁盘空间或其他东西。

答案 1 :(得分:0)

使用正确的工具完成工作。 filebuf只是流入的缓冲区。在iostreams API中编写的实际内容是std::ostream

std::filebuf file;
if (file.open(...)) {
    std::ostream os(&file);
    os << sentence;
    os.write(reinterpret_cast<const char*>(&fx), sizeof(fx));
}

使用<<write()也更容易记住,而不是处理streambuf API的隐藏名称功能的迷宫。