Bonjour,

je réalise un parser en C++.
Je viens donc ouvrir un ifstream, puis je viens lire les caractères à l'aide des fonctions peek() ou get(), et parfois je dois replacer des caractères consommés ce que je fais grâce à un putback()Tout se déroule très bien jusqu'à ce qu'un putback soit en échec. Je passe systématique par cette fonctions statique, qui me permet de contrôler le good() avant et après.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
void DTD_Static::putback(basic_ifstream<TYPE>* bifs, TYPE c)
{
  UTL_REQUIRE(bifs->good());
  bifs->putback(c);
  UTL_ENSURE(bifs->good());
}
J'ai découvert que cette erreur arrive alors qu'un compteur arrive à zéro (désolée, je suis sous Visual au boulot et sous minGW à la maison et là j'ai plus le nom sous la main). Mais j'ai trouvé que ce compteur qui décrémente était initialisé à 4096 à l'ouverture du fichier.

Alors oui, j'ai vu que je pouvais mapper le contenu de mon fichier dans un buffer char* à l'aide de la fonction read et de la taille du fichier, mais alors je perd le bénéficie des putback, get et autre peek.

Est-ce qu'il existe une solution de faire glisser le contenu à un instant T ? Merci.