2014-05-07 3 views
0

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); 
      } 
     } 
+1

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))? –

+1

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. –

+0

mais comment puis-je obtenir eofbit, si ignorer (devrait) définir à EOF? if (ifFile.eof()) ne fonctionne pas directement après ifFile.ignore (...) –

Répondre

0

suffit de cocher eof() après l'appel à ignore():

if (f.ignore(std::numeric_limits<std::streamsize>::max(), '\n').eof()) { 
    // end of file was found 
} 
+0

Merci, ça marche maintenant :) –