1

次のコードを調べてください:

#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->nは有効な量の書き込み文字を返しています (デバッグで確認済み)。

4

2 に答える 2

0

あなたのコードは私のシステムで問題なく動作し、bd.bin19 文字の を生成します。

これがまさにあなたが構築して実行したものであると確信していますか? 問題のあるコンパイラを使用しているか、ディスク容量が不足している可能性があります。

于 2018-03-06T20:43:52.083 に答える
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));
}

また、 APIである不可解な名前の関数の迷路に対処するよりも<<、使用する方が覚えやすく、簡単です。write()streambuf

于 2018-03-06T20:44:22.647 に答える