Comment puis-je retourner un ifstream de revenir au début d'une ligne que l'on vient de lire en C++?

Après j'ai lu une ligne d'un fichier à l'aide de ifstream, est-il un moyen pour amener le flux de revenir au début de la ligne, je viens de lire, sous certaines conditions?

using namespace std;
//Some code here
ifstream ifs(filename);
string line;
while(ifs >> line)
{
   //Some code here related to the line I just read

   if(someCondition == true)
   {
    //Go back to the beginning of the line just read
   }
   //More code here
} 

Donc si someCondition est vrai, la prochaine ligne de lire au cours de la prochaine pendant l'itération de boucle sera la même ligne, je viens de lire à l'instant. Sinon, la prochaine pendant l'itération de boucle va utiliser la ligne suivante dans le fichier. Si vous avez besoin de plus de précisions, veuillez ne pas hésiter à demander. Merci à l'avance!

Mise à JOUR #1

J'ai donc essayé le suivant:

while(ifs >> line)
{
   //Some code here related to the line I just read
   int place = ifs.tellg();
   if(someCondition == true)
   {
    //Go back to the beginning of the line just read
    ifs.seekg(place);
   }
   //More code here
}

Mais il ne lit pas de la même ligne de nouveau lorsque la condition est vraie. Est un entier acceptable tapez ici?

Mise à JOUR #2: La Solution

Il y avait une erreur dans ma logique. Voici la version corrigée qui fonctionne comme je le souhaite pour tout ceux qui sont curieux:

int place = 0;
while(ifs >> line)
{
   //Some code here related to the line I just read

   if(someCondition == true)
   {
    //Go back to the beginning of the line just read
    ifs.seekg(place);
   }
  place = ifs.tellg();
   //More code here
}

L'appel à tellg() a été déplacé à la fin parce que vous avez besoin de chercher le début de la ligne de lecture. La première fois j'ai appelé tellg() et puis il a appelé seekg() avant que le flux même changé, ce qui est pourquoi il semblait que rien n'a changé (car il n'avions pas vraiment). Merci à tous pour vos contributions.

Utilisation tellg() pour obtenir le flux de position avant de lire la ligne et seekg() pour définir le flux de position à la position que vous avez sauvegardée.
Par la manière, de la fi >> string n'est pas prise en lignes, mais des mots. Utiliser std::getline
Merci au sujet getline. Il a causé des bugs gênants dans l'avenir.

OriginalL'auteur Kimberly W | 2012-10-15