TFileStream.Seek超出文件末尾

dum*_*uch 1 delphi winapi delphi-2007

我们刚刚在Delphi 2007中遇到了TFileStream.Seek(实际上该方法继承自THandleStream)的一种特殊行为:

您可以在文件末尾搜索而不会出现错误,在搜索之后您甚至可以从文件中读取而不会出现错误.

代码基本上只调用Windows API函数SetFilePointer,似乎做了正确的错误处理.有人能解释一下这里发生了什么吗?

Dav*_*nan 9

状态的MSDN文档SetFilePointer:

将文件指针设置为超出文件末尾的位置不是错误.在调用SetEndOfFile,WriteFile或WriteFileEx函数之前,文件的大小不会增加.写操作会将文件的大小增加到文件指针位置加上写入的缓冲区的大小,这会导致插入的字节未初始化.

这就是文件系统的工作方式.