Maintaining a valid position using seekg in ifstreams
I am trying to make my file parsing more robust. Using an ifstream, how can I ensure seekg
keeps me in a valid position within the file?
This does not work:
while(m_File.good() && m_File.peek() != EOF)
{ ...a seekg operation moves file position past end of file... }
I assume the current itera开发者_高级运维tor has been pushed way past the end iterator, so the peek() is never true.
No, there is no way of doing this, short of finding the offset of the end of file and making sure you don't seek beyond it, which causes undefined behaviour - you can of course increase the size of the file by writing.
If it's an error when you reach a bad position (e.g. it shouldn't happen) you may try to set the stream exception mask, and catch the appropriate exception outside of the while loop. In that case it'd be the "cleanest" solution.
精彩评论