J'ai un petit problème. Je veux sauter quelques lignes dans un fichier. Atm J'utiliseAttraper (ef-) exception d'istream ignorer
for(int i=0; i < ln -1; ++i)
{
ifFile.ignore((std::numeric_limits<std::streamsize>::max)(),'\n');
}
Sur cplusplus.com il ignore ce qui est écrit jetteront une exception si EOF est atteint. Mais je ne peux pas l'obtenir avec try/catch. Qu'ai-je fait de mal? Ou ai-je mal lu sth? Ce dont j'ai besoin, c'est que je veux recommencer à la première ligne pour certaines opérations si eof est atteint.
donc j'ai essayé STH, mais cela n'a pas fonctionné:
for(int i=0; i < ln -1; ++i)
{
try
{
ifFile.ignore((std::numeric_limits<std::streamsize>::max)(),'\n');
}
catch(exception e)
{
if(ifFile.eof())
{
ifFile.clear(ifFile.eofbit);
ifFile.seekg(std::ios::beg);
_readCounter.currLine = 1;
}
}
}
Mais il n'a pas couru dans catch().
S'il y a des questions, n'hésitez pas à demander.
Correction d'un:
for(int i=0; i < ln; i++)
{
if(ifFile.ignore((std::numeric_limits<std::streamsize>::max)(),'\n').eof())
{
ifFile.clear(ifFile.eofbit);
ifFile.seekg(std::ios::beg);
}
}
Vous avez [définir le masque d'exception] (http://en.cppreference.com/w/ cpp/io/basic_ios/exceptions) (comme décrit dans [cette référence] (http://en.cppreference.com/w/cpp/io/basic_istream/ignore))? –
Les flux IOS n'utilisent pas d'exceptions par défaut, mais ils ont des ** états d'échec **. Et ce n'est généralement pas une bonne idée de configurer un iostream pour utiliser des exceptions, précisément à cause de la manipulation d'EOF. Les flux ne sont pas vraiment conçus pour utiliser des exceptions pour les rapports d'échec. –
mais comment puis-je obtenir eofbit, si ignorer (devrait) définir à EOF? if (ifFile.eof()) ne fonctionne pas directement après ifFile.ignore (...) –