我们刚刚在Delphi 2007中遇到了TFileStream.Seek(实际上该方法是从THandleStream继承)的特殊行为:
您可以在文件末尾搜索而不会出现错误,在搜索之后您甚至可以从文件中读取而不会出现错误。
代码基本上只调用Windows API函数SetFilePointer,似乎做了正确的错误处理。有人能解释一下这里发生了什么吗?
答案 0 :(得分:9)
SetFilePointer
州的MSDN文档:
设置文件不是错误 指向超越结束位置的指针 的文件。文件的大小 直到你打电话给你才会增加 SetEndOfFile,WriteFile或 WriteFileEx函数。一个写 操作增加了大小 文件到文件指针位置加 写入的缓冲区的大小,其中 导致中间字节 初始化。
这就是文件系统的工作方式。
答案 1 :(得分:3)
支持NTFS稀疏文件需要Afaik这种行为(寻求超越结束,写入块)。