2009-12-20 26 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