Для записи двоичных файлов используйте метод std::ostream::write()
, а не operator<<
:
FileCreator.write((char *) &AccountNumber, sizeof(AccountNumber));
Приведение необходимо, потому что нет перегрузки для записи целых чисел в поток.
Помните, что read
и write
спарены для двоичного ввода / вывода.
Редактировать 1: записи фиксированной длины и переменной длины
Помните, что вам нужно размер предмета при письме и чтении. Это будет работать для элементов и структур данных фиксированного размера / длины. Однако он не очень хорошо работает с данными переменной длины, такими как текст.
Для записей переменной длины вы можете сначала записать длину, а затем данные:
static const char hello[] = "Hello";
static const unsigned int data_size(sizeof(hello) - 1);
FileCreator.write((char *) &data_size, sizeof(data_size));
FileCreator.write(&hello[0], data_size);
В приведенном выше примере "- 1" присутствует, так что завершающий символ NUL не записывается в файл. Вам не нужно это для двоичных файлов, но YMMV (я использую идиому при записи в консоль и другие читаемые человеком потоки).