Почему эта программа не читает (или пишет?) Правильно из файла .bin? (C ++) - PullRequest
0 голосов
/ 26 мая 2009

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

#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. Почему это происходит и как я могу это исправить?

Ответы [ 4 ]

7 голосов
/ 26 мая 2009

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

2 голосов
/ 26 мая 2009

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

1 голос
/ 26 мая 2009

Я согласен с Джерико. Вам нужно:

file.seekg (0, ios::beg);
1 голос
/ 26 мая 2009

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

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

...