2011-03-17 98 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)