2009-12-20 88 views
2

我想让我的文件解析更健壮。使用ifstream,我如何确保seekg让我在文件中的有效位置?在ifstreams中使用seekg维护一个有效的位置

这不起作用:

while(m_File.good() && m_File.peek() != EOF) 
{ ...a seekg operation moves file position past end of file... } 

我假设当前迭代器已被推方式过去结束迭代,所以偷看()是不正确的。

回答

2

不,没有办法做到这一点,缺少找到文件末尾的偏移量,并确保你不寻求超越它,这会导致未定义的行为 - 你当然可以增加文件的大小通过写作。

+0

寻找ifstream长度的最佳方法是什么? – DanDan 2009-12-20 22:34:11

+0

寻求文件的结尾:) – 2009-12-20 22:35:47

+0

这是一个耻辱,没有更干净的方式做到这一点。 – DanDan 2009-12-21 11:05:32

1

如果在达到不良位置时发生错误(例如,它不应该发生),您可以尝试设置stream exception mask,并在while循环外捕获适当的异常。在那种情况下,它将是“最干净”的解决方案。

+0

寻找超出文件的界限是未定义的行为 - 没有例外。 – 2009-12-20 22:12:26

+0

但是当阅读时有一个例外?我也在看这个话题:http://stackoverflow.com/questions/1099601/ifstream-seekg-beyond-end-does-not-return-eof-in-vs-2008-express – 2009-12-20 22:33:39