Пожалуйста, проверьте следующий код:
#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
возвращает допустимое количество письменных символов (проверено с помощью отладки).
Ваш код отлично работает в моей системе, производя bd.bin
с 19 символов.
Вы уверены, что это именно то, что вы построили и запустили? Возможно, вы используете проблемный компилятор или у вас недостаточно места на диске или что-то в этом роде.
Используйте правильный инструмент для работы. filebuf
это просто буфер, в который потоковый поток Фактическая вещь, которая делает запись в API iostreams, является std::ostream
:
std::filebuf file;
if (file.open(...)) {
std::ostream os(&file);
os << sentence;
os.write(reinterpret_cast<const char*>(&fx), sizeof(fx));
}
Также легче запомнить, чтобы использовать <<
а также write()
вместо того, чтобы иметь дело с лабиринтом загадочно названных functinos, который является streambuf
API.