Pregunta

Estoy teniendo problemas con la instrucción de getline fstream. este es un fragmento de mi código:


boolean_1=true;
while(true)
{
   if(boolean_1)
   {
      //some stuff
   }
   else
   {
        save_file.open("save.txt", fstream::in);
        //some stuff
        save_file.close();
   }

    mission_file.open(filename, fstream::in);
    mission_file.getline(buffer_line, 256);

    //some other stuff

    boolean_1=false;
    save_file.open("save.txt", fstream::out);
    //write something
    save_file.close();    
}

Este código debe abrir la mission_file la primera vez que se ejecuta, y abrir un archivo guardado en la próxima iteración. El archivo de almacenamiento se haya creado al final de cada ciclo. Por lo menos que debería funcionar de esta manera. Debido a que, la primera vez que todo funciona a la perfección, pero en la siguiente iteración, "mission_file.getline (buffer_line, 256);" devuelve una línea vacía, por lo que la caída del programa. Además, si se inicia boolean_1 como falsa, el ciclo funciona bien hasta la siguiente.

Ya han comprobado la existencia de la ".txt" s requerida, tanto mission_file y el retorno save_file is_open () verdadera.

¿Fue útil?

Solución

Es imposible ver a partir de los extractos de código que has publicado, pero suena como que está reutilizando el mismo objeto std::fstream para cada ciclo.

Sería más claro para crear un nuevo objeto local dentro del bucle en el punto en el que es necesario volver a abrir el archivo.

Si tiene que volver a utilizar el mismo objeto fstream para abrir un nuevo archivo (o el mismo archivo otra vez) que debe asegurarse de borrar los distintivos de error corriente antes de la lectura del nuevo archivo.

Realización de una clear en algún momento antes de la primera lectura del nuevo archivo debe hacer esto.

mission_file.clear()

Otros consejos

¿Se está asegurando que mission_file se está cerrando, porque no veo mission_file.close(). ¿O es que usted acaba de perder a poner esa línea en el fragmento de código aquí.

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