2011-03-17 49 views
25

所以我讀過的所有行從文件正是如此回到文件開頭函數getline後

while (getline(ifile,line)) 
    { 
     // logic 
    } 

凡IFILE是ifstream的和行是一個字符串

我的問題是我現在想使用函數getline了一遍,並且似乎無法返回到文件的開頭,如運行

cout << getline(ifile,line); 

將返回0

我已經嘗試使用:

ifile.seekg (0, ios::beg); 

無濟於事,似乎沒有任何效果。我該如何回到文件的開頭?

回答

48

由於您已達到文件末尾,因此將設置eof標誌。需要明確的是,使用ifile.clear - 然後試求:

ifile.clear(); 
ifile.seekg(0, ios::beg); 
+0

FWIW語句的順序可能不重要,如果'seekg'忽略標誌 - 我不確定。 – 2011-03-17 18:00:19

+0

謝謝,它已經排序了! – bq54 2011-03-17 18:02:34

+3

就像在C++ 11中的旁註一樣,如果在調用之前設置,seekg會清除eofbit標誌。 – Zermingore 2016-02-10 11:22:39

4

這是因爲EOF標誌已經設置在流 - 由於你到達文件的末尾。所以你必須清除這個作爲一個額外的步驟。

ifile.clear(); 
ifile.seekg (0, ios::beg); 
1

無法在康拉德的回答進行評論,因爲沒有足夠的聲譽,所以我要有權發佈此作爲回答,SRY:

FYI:在我的情況下,爲了此事DID,從而

  1. 明確
  2. 尋求

否則下一個getline操作失敗(MSVC v120)