2014-05-07 119 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

謝謝,現在可以使用:) –