¿Por qué no este programa leer (o escribir?) Correctamente desde un archivo .bin? (C ++)

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

  •  05-09-2019
  •  | 
  •  

Pregunta

He creado este programa:

#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;
}

que se supone que escribir un número entero "n" en un archivo "test.bin" .bin, a continuación, leer los datos de "test.bin" en un entero "x", a continuación, muestra el mensaje "x" a la pantalla.

Al ejecutar el programa, no muestra 5, pero -842150451. ¿Por qué ocurre esto y cómo puedo solucionarlo?

¿Fue útil?

Solución

No es el file.write () que se mueve el puntero del archivo actual cuando se escribe, causando a leer los datos de la primera ubicación después de los datos escritos?

Otros consejos

Insertar file.seekg(0); entre la lectura y escritura de comandos.

Hay que cambiar la posición de la secuencia de archivo al principio del archivo después de hacer la escritura con el fin de leer los datos que acaba de escribir.

También debe comprobar que la escritura escribió todo lo que esperábamos que, y si el leer realmente leer nada en absoluto. El número semi-aleatoria se debe al fallo de lectura.

Estoy de acuerdo con Jherico. Se necesita una:

file.seekg (0, ios::beg);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top