Question

Je vais avoir des problèmes avec l'instruction getline de fstream. c'est un extrait de mon code:


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();    
}

Ce code devrait ouvrir le mission_file la première fois qu'il fonctionne, et d'ouvrir un fichier de sauvegarde à la prochaine itération. Le fichier de sauvegarde est créé à la fin de chaque cycle. il devrait fonctionner comme ceci au moins. Parce que, la première fois, tout fonctionne parfaitement, mais dans la prochaine itération, « mission_file.getline (buffer_line, 256); » retourne une ligne vide, ce qui rend le plantage du programme. De plus, si les mises en boolean_1 comme faux, le cycle fonctionne bien jusqu'à ce que le prochain.

Je l'ai déjà vérifié l'existence du nécessaire "txt" s, à la fois mission_file et retour save_file is_open () vrai.

Était-ce utile?

La solution

Il est impossible de voir des extraits de code que vous avez posté, mais il semble que vous réutilisez le même objet std::fstream pour chaque cycle.

Il serait plus clair pour créer un nouvel objet local dans la boucle au point où vous avez besoin de re-ouvrir le fichier.

Si vous devez réutiliser le même objet fstream pour ouvrir un nouveau fichier (ou le même fichier une autre fois), vous devez vous assurer d'effacer les drapeaux d'erreur de flux avant la lecture du nouveau fichier.

Effectuer une clear à un moment donné avant la première lecture du nouveau fichier devrait le faire.

mission_file.clear()

Autres conseils

Êtes-vous sûr que mission_file est fermée, parce que je ne vois pas mission_file.close(). Ou est-ce que vous venez de manquer de mettre cette ligne dans le code extrait de code ici.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top