的結束,我們只是在2007年德爾福在整個TFileStream.Seek(實際上是方法是從THandleStream繼承)的奇特行爲傳來:TFileStream.Seek超越文件
您可以尋求超出文件的結尾沒有錯誤並且在查找之後,您甚至可以從文件中讀取而不會出錯。
該代碼基本上只是調用Windows API函數SetFilePointer,似乎做適當的錯誤處理。有人可以解釋這裏發生了什麼嗎?
的結束,我們只是在2007年德爾福在整個TFileStream.Seek(實際上是方法是從THandleStream繼承)的奇特行爲傳來:TFileStream.Seek超越文件
您可以尋求超出文件的結尾沒有錯誤並且在查找之後,您甚至可以從文件中讀取而不會出錯。
該代碼基本上只是調用Windows API函數SetFilePointer,似乎做適當的錯誤處理。有人可以解釋這裏發生了什麼嗎?
MSDN文檔SetFilePointer
狀態:
它不是一個文件 指針設置爲位置超出文件的末尾 錯誤。在調用 SetEndOfFile,WriteFile或 WriteFileEx函數之前,文件的大小確實不會增加 。寫入 操作將 文件的大小增加到文件指針位置加上 寫入的緩衝區的大小,其中 導致中間字節 未初始化。
這是如何設計文件系統的工作。
我是兩秒鐘的時間發佈相同的答案:)我認爲這很奇怪,但這種行爲還包括以只讀方式打開的文件。 – 2011-02-08 10:07:56
爲了支持NTFS稀疏文件,需要Afaik這種行爲(尋求超越最後,在那裏寫塊)。
相關:http://stackoverflow.com/questions/3300938/delphi-tfilestream-seek-how-to-check-for-invalid-seek-offset – 2011-02-08 10:14:36