Почему эта программа неправильно читает (или записывает?) файл .bin?(С++)

StackOverflow https://stackoverflow.com/questions/908605

  •  05-09-2019
  •  | 
  •  

Вопрос

Я создал эту программу:

#include <iostream>
#include <fstream>
using namespace std;

int main () {
  fstream file;
  file.open("test.bin", ios::in | ios::out | ios::binary);
  if(!file.is_open())
  {
      return -1;
  }
  int n = 5;
  int x;
  file.write(reinterpret_cast<char*>(&n), sizeof(n));
  file.read(reinterpret_cast<char*>(&x), sizeof(x));
  std::cout<<x;
  file.close();
  std::cin.ignore();
  return 0;
}

он должен записать целое число «n» в файл .bin «test.bin», затем прочитать данные из «test.bin» в целое число «x», а затем вывести «x» на экран.

Когда запускаю программу, она показывает не 5, а -842150451.Почему это происходит и как это исправить?

Это было полезно?

Решение

Разве file.write() не перемещает указатель текущего файла при его записи, заставляя вас читать данные из первого места ПОСЛЕ записанных данных?

Другие советы

Вставлять file.seekg(0); между командами чтения и записи.

Вам необходимо переместить файловый поток в начало файла после выполнения записи, чтобы прочитать только что записанные данные.

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

Я согласен с Джерико.Тебе необходимо:

file.seekg (0, ios::beg);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top