2011-02-08 35 views
1

的結束,我們只是在2007年德爾福在整個TFileStream.Seek(實際上是方法是從THandleStream繼承)的奇特行爲傳來:TFileStream.Seek超越文件

您可以尋求超出文件的結尾沒有錯誤並且在查找之後,您甚至可以從文件中讀取而不會出錯。

該代碼基本上只是調用Windows API函數SetFilePointer,似乎做適當的錯誤處理。有人可以解釋這裏發生了什麼嗎?

+1

相關:http://stackoverflow.com/questions/3300938/delphi-tfilestream-seek-how-to-check-for-invalid-seek-offset – 2011-02-08 10:14:36

回答

9

MSDN文檔SetFilePointer狀態:

它不是一個文件 指針設置爲位置超出文件的末尾 錯誤。在調用 SetEndOfFile,WriteFile或 WriteFileEx函數之前,文件的大小確實不會增加 。寫入 操作將 文件的大小增加到文件指針位置加上 寫入的緩衝區的大小,其中 導致中間字節 未初始化。

這是如何設計文件系統的工作。

+0

我是兩秒鐘的時間發佈相同的答案:)我認爲這很奇怪,但這種行爲還包括以只讀方式打開的文件。 – 2011-02-08 10:07:56

3

爲了支持NTFS稀疏文件,需要Afaik這種行爲(尋求超越最後,在那裏寫塊)。