2017-05-25 90 views
-2

我正在編寫一個程序來掃描一個文件,並在這樣做時會調用seekg()。它在一個循環中旋轉,條件是!infile.eof();所以它應該在到達文件末尾時退出循環。但是,由於某種原因它卡住了。我懷疑這可能是因爲它在seekg()中到達文件的末尾。換句話說,如果我是從文件末尾開始的50個字節,我調用seekg()並告訴它將指針移動100個字節,可能會導致它卡住(在seekg()或之後)。那麼,當要求將指針移動到文件末尾時,seekg()實際上會做什麼?當它到達文件末尾時,istream :: seekg()會做什麼?

預先感謝您。

+1

您確定您的期望和使用'eof'是否正確?你確定你的代碼和邏輯的其餘部分是正確的嗎?這就是爲什麼包含這種類型的問題需要[mcve] ..我建議你訪問[幫助中心](http://stackoverflow.com/help)並查看部分[我如何提出一個好問題](http://stackoverflow.com/help/how-to-ask)。 –

+3

您只能在嘗試閱讀某些內容後使用'infile.eof()'。它會告訴你上一次讀取是否失敗,因爲你在文件末尾。 – Barmar

+0

請參閱http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong – Barmar

回答

2

當您尋找文件末尾時沒有什麼特別的事情發生。您只會注意到,當您下次嘗試從文件中讀取時,您已經走到了盡頭。這允許一些其他進程在您尋找的時間和您讀取的時間之間添加到文件中 - 在這種情況下,讀取會成功。

當您尋找結束後,如果您嘗試從文件讀取它將失敗,並設置流的eofbit。下次您在此之後撥打infile.eof()時,將返回true

一般而言,在嘗試閱讀某些內容之前,您不能使用infile.eof()。這就是爲什麼像循環:

while (!infile.eof()) { 
    ... 
} 

永遠是錯的 - 它之前檢查EOF 試圖讀取,而不是讀取失敗後。請參閱http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong

相關問題