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