我正在使用Delphi 2006中的TFileStream。当我调用TFileStream.Seek并且偏移超出范围时,我得到不同的返回值。当我寻找位于流开头下方的位置时,该函数返回-1,如果我寻求超出流大小,则该函数返回流中的位置(如果流是那么大)。有没有办法检查流上的查找操作是否成功?当搜索偏移超出当前流大小的范围时,为什么TFileStream.Seek不会失败?
提前致谢。
答案 0 :(得分:2)
是的,你可以寻求超出文件大小 - 这里没有错误,寻求成功。更重要的是,你可以锁定超出文件大小的文件区域(参见LockFile) - 这也没关系,并且被某些RDBMS用来实现表/记录锁定。
同样来自MSDN:
设置文件不是错误 指向超越结束位置的指针 的文件。文件的大小 直到你打电话给你才会增加 SetEndOfFile,WriteFile或 WriteFileEx函数。一个写 操作增加了大小 文件到文件指针位置加 写入的缓冲区的大小,其中 导致中间字节 初始化。
因此,通过将文件指针设置为超出文件大小,您可以随后增加文件大小(来自SetEndOfFile)。
答案 1 :(得分:0)
它调用一个windows函数,你得到的结果来自windows函数。
如果Seek值有效,我会倾向于检查您的代码。如果你需要这么做,那么可能会创建一个TFileStream的后代,比如TRangeCheckingFileStream,它包含了搜索方法中的范围检查,并返回一个你可以期待的值。