Reputation: 279
I'm reading a file through a function like this:
#include <iostream>
#include <fstream>
#include <string>
...
void readfile(string name){
string line;
int p = 0;
ifstream f(name.c_str());
while(getline(f,line)){
p++;
}
f.seekg(0);
cout << p << endl;
getline(f,line);
cout << line << endl;
}
Mi file has 3 lines:
first
second
third
I expected the output:
3
first
Instead I get:
3
(nothing)
why is my seekg not working?
Upvotes: 0
Views: 1281
Reputation: 36
Use iterators for read from the file
std::fstream file( "myfile.txt", std::ios::out );
std::string data = std::string(
std::istreambuf_iterator<char>( file ),
std::istreambuf_iterator<char>() );
Upvotes: 0
Reputation: 21089
Because seekg()
fails if the stream has reached the end of the file (eofbit
is set), which occurs due to your getline
looping. As sftrabbit implies, calling clear()
will reset that bit and should allow you to seek properly. (Or you could just use C++11, in which seekg
will clear eofbit
itself.)
Upvotes: 3