Pregunta

Estoy desarrollando una aplicación en Windows, y estoy usando fstreams a leer y escribir en el fichero.

Estoy escribiendo con fstream abierto como esto:

fs.open(this->filename.c_str(), std::ios::in|std::ios::out|std::ios::binary);

y escribir con este comando

fs.write(reinterpret_cast<char*>(&e.element), sizeof(T));

cerrar el archivo después de cada escritura con

fs.close()

Lectura con ifstream abierto como esto:

is.open(filename, std::ios::in);

y la lectura con este comando:

is.read(reinterpret_cast<char*>(&e.element), sizeof(T));

La escritura va bien. Sin embargo, he leído en un bucle de esta manera:

while(!is.eof())
{
  is.read(reinterpret_cast<char*>(&e.element), sizeof(T));
}

y el programa mantiene la lectura, a pesar de que al final del archivo debe ser alcanzado. pos istellg es 0, y gcount es igual a 0 también, pero fallan al bit y EF bits son ambos muy bien.

Me estoy quedando loco por esto, necesita un poco de ayuda ...

¿Fue útil?

Solución

Prueba esto:

while(is.read(reinterpret_cast<char*>(&e.element), sizeof(T))) {}

También se debe abrir la istream con la bandera binary así:

is.open(filename, std::ios::in | std:ios::binary);

Si se lee siempre, ¿qué leer? ¿Qué tipo es T?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top