Как записать данные (двоичный режим) в файл, используя только std :: 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 -> n возвращает допустимое количество письменных символов (проверено с помощью отладки).

1

Решение

Ваш код отлично работает в моей системе, производя bd.bin с 19 символов.

Вы уверены, что это именно то, что вы построили и запустили? Возможно, вы используете проблемный компилятор или у вас недостаточно места на диске или что-то в этом роде.

0

Другие решения

Используйте правильный инструмент для работы. 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.

0

По вопросам рекламы [email protected]