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

时间:2010-07-21 15:23:55

标签: delphi filestream tfilestream

我正在使用Delphi 2006中的TFileStream。当我调用TFileStream.Seek并且偏移超出范围时,我得到不同的返回值。当我寻找位于流开头下方的位置时,该函数返回-1,如果我寻求超出流大小,则该函数返回流中的位置(如果流是那么大)。有没有办法检查流上的查找操作是否成功?当搜索偏移超出当前流大小的范围时,为什么TFileStream.Seek不会失败?

提前致谢。

2 个答案:

答案 0 :(得分:2)

是的,你可以寻求超出文件大小 - 这里没有错误,寻求成功。更重要的是,你可以锁定超出文件大小的文件区域(参见LockFile) - 这也没关系,并且被某些RDBMS用来实现表/记录锁定。

同样来自MSDN:

  

设置文件不是错误   指向超越结束位置的指针   的文件。文件的大小   直到你打电话给你才会增加   SetEndOfFile,WriteFile或   WriteFileEx函数。一个写   操作增加了大小   文件到文件指针位置加   写入的缓冲区的大小,其中   导致中间字节   初始化。

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

答案 1 :(得分:0)

它调用一个windows函数,你得到的结果来自windows函数。

如果Seek值有效,我会倾向于检查您的代码。如果你需要这么做,那么可能会创建一个TFileStream的后代,比如TRangeCheckingFileStream,它包含了搜索方法中的范围检查,并返回一个你可以期待的值。