Question Retour au début du fichier après getline


J'ai donc lu toutes les lignes d'un fichier ainsi

while (getline(ifile,line))
    {
        // logic
    }

Où ifile est un ifstream et que line est une chaîne

Mon problème est que je veux maintenant utiliser getline à nouveau, et semble être incapable de retourner au début du fichier, en cours d'exécution

cout << getline(ifile,line);

Reviendra 0

J'ai essayé d'utiliser:

ifile.seekg (0, ios::beg);

En vain, cela semble n'avoir aucun effet. Comment revenir au début du fichier?


28
2018-03-17 17:57


origine


Réponses:


Depuis que vous avez atteint la fin du fichier, le eof le drapeau sera défini. Vous devez effacer cela en utilisant ifile.clear - puis essayez de chercher:

ifile.clear();
ifile.seekg(0, ios::beg);

52
2018-03-17 17:59



Cela est dû au fait que l’indicateur eof a été défini sur le flux, car vous avez atteint la fin du fichier. vous devez donc effacer cela comme une étape supplémentaire.

Par exemple

ifile.clear();
ifile.seekg (0, ios::beg);

4
2018-03-17 18:08



incapable de commenter la réponse de Konrad, car pas assez de réputation, alors je vais devoir poster ceci comme réponse,

FYI: Dans mon cas, l'ordre DID compte, donc

  1. clair
  2. chercher

sinon la prochaine opération getline a échoué (MSVC v120)


1
2018-01-15 11:04