2014-05-07 70 views
0

我遇到了一些问题。我想跳过文件中的一些行。 ATM我使用捕捉(eof-)istream忽略的例外

 for(int i=0; i < ln -1; ++i) 
     { 
      ifFile.ignore((std::numeric_limits<std::streamsize>::max)(),'\n'); 
     } 

cplusplus.com有写在忽略会抛出一个异常,如果到达EOF。但我无法用try/catch来获得它。我做错了什么?还是我误读了?

我需要的是,如果达到eof,我想再次在第一行开始一些操作。

所以,我想......但它没有工作:

 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; 
       } 
      } 
     } 

但它并没有碰上赶上()。

如果有一些问题随时问。

更正一个:

 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

你有[设置异常掩码(http://en.cppreference.com/w/ cpp/io/basic_ios/exceptions)(如[此参考资料](http://en.cppreference.com/w/cpp/io/basic_istream/ignore)中所述)? –

+1

Iostreams默认情况下不使用异常,而是具有**失败状态**。一般来说,配置iostream以使用异常通常不是一个好主意,正是由于EOF处理。这些流并非真正用于使用异常来报告故障。 –

+0

但如何忽略(应该)设置在EOF如何获得eofbit? if(ifFile.eof())在ifFile.ignore(...)后不能直接工作(...) –

回答

0

电话后只检查eof()ignore()

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

谢谢,现在可以使用:) –