2011-02-08 53 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这种行为(寻求超越最后,在那里写块)。