Quel est le problème avec la recherche d'ifstream
Je suis en train de faire une recherche et de re-lire les données. mais le code ne fonctionne pas.
Le code est
std::ifstream ifs (filename.c_str(), std::ifstream::in | std::ifstream::binary);
std::streampos pos = ifs.tellg();
std::cout <<" Current pos: " << pos << std::endl;
//read the string
std::string str;
ifs >> str;
std::cout << "str: " << str << std::endl;
std::cout <<" Current pos: " <<ifs.tellg() << std::endl;
//seek to the old position
ifs.seekg(pos);
std::cout <<" Current pos: " <<ifs.tellg() << std::endl;
//re-read the string
std::string str2;
ifs >> str2;
std::cout << "str2: (" << str2.size() << ") " << str2 << std::endl;
std::cout <<" Current pos: " <<ifs.tellg() << std::endl;
Mon test d'entrée de fichier est
qwe
La sortie a été
Current pos: 0
str: qwe
Current pos: 3
Current pos: 0
str2: (0)
Current pos: -1
Quelqu'un peut me dire quel est le problème?
source d'informationauteur veda
Vous devez vous connecter pour publier un commentaire.
Quand
ifs >> str;
se termine parce que la fin de fichier est atteinte, il définit la eofbit.Jusqu'à ce que le C++11,
seekg()
ne pouvait pas chercher loin de la fin du cours d'eau (remarque: la vôtre en fait, depuis la sortie estCurrent pos: 0
mais ce n'est pas exactement conforme: ne pas chercher ou il est conseillé de désactiver le eofbit et de chercher).De toute façon, pour contourner ce problème, vous pouvez exécuter
ifs.clear();
avantifs.seekg(pos);
Il ressemble à lire les caractères, il est de frapper les expressions du FOLKLORE et de marquage dans le courant de l'état. Le ruisseau de l'état n'est pas modifié lors de la seekg() appel et la lecture suivante detectes que les expressions du FOLKLORE bit est défini et retourne sans les lire.