Delphi TFileStream.Seek,如何检查无效的Seek偏移量

Delphi TFileStream.Seek,如何检查无效的Seek偏移量,delphi,filestream,tfilestream,Delphi,Filestream,Tfilestream,我在Delphi 2006中与TFileStream合作。当我调用TFileStream.Seek时,偏移量超出了界限,我得到了不同的返回值。当我搜索到流开头以下的位置时,函数返回-1,如果我搜索到流大小以外的位置,函数返回流中如果流那么大的位置。有没有办法检查流上的寻道操作是否成功?当搜索偏移量超出当前流大小的界限时,为什么TFileStream.Seek不会失败 提前感谢。是的,您可以搜索超出文件大小的内容-如果此处没有错误,则搜索成功。除此之外,您还可以将文件区域(请参阅)锁定到超出文件大

我在Delphi 2006中与TFileStream合作。当我调用TFileStream.Seek时,偏移量超出了界限,我得到了不同的返回值。当我搜索到流开头以下的位置时,函数返回-1,如果我搜索到流大小以外的位置,函数返回流中如果流那么大的位置。有没有办法检查流上的寻道操作是否成功?当搜索偏移量超出当前流大小的界限时,为什么TFileStream.Seek不会失败


提前感谢。

是的,您可以搜索超出文件大小的内容-如果此处没有错误,则搜索成功。除此之外,您还可以将文件区域(请参阅)锁定到超出文件大小的位置—这也是可以的,一些RDBMS使用它来实现表/记录锁定

同样来自MSDN:

设置文件不是错误 指向末端以外位置的指针 文件的一部分。文件的大小不确定 在你调用 SetEndOfFile、WriteFile或 WriteFilex函数。笔迹 操作会增加文件的大小 文件指针位置加上 写入的缓冲区大小,其中 结果是插入字节 未初始化


因此,通过将文件指针设置为超出文件大小,您可以随后增加文件大小(例如,通过SetEndOfFile)。

它调用windows函数,结果来自windows函数


如果Seek值有效,我倾向于检查代码。如果您需要经常这样做,那么可以创建TFileStream的后代,类似于TRangeCheckingFileStream的东西,它在其seek方法中包含范围检查,并返回一个您可以期望的值。

这正是
TFileStream
Size
属性setter的实现方式-对指定大小偏移量的查找,然后调用
SetEndOfFile()