1

我面临着提供对千兆字节文件中选定数据的某种快速访问。一旦我找到了起点,随后的访问将是连续的。这些文件在每条记录的前面都包含一个日期,并且该日期在整个文件中都会增加。我不想从头开始阅读文件而忽略前面的内容。我只对 WINDOWS 应用程序感兴趣。我想以文本模式打开文件。

我突然想到,我可以使用 64 位 fseek/ftell 或 fsetpos/fgetpos 函数进行某种二进制搜索。我意识到我可能会寻找换行符分隔记录的中间,但有人会认为您可以通过 fgets 调用简单地跳过任何部分记录。

fseek 提供了原始 SEEK_END 机制,因此似乎可以与 ftell 一起使用来确定文件大小。我没有看到与 fsetpos/fgetpos 类似的设施。如果您使用 fsetpos/fgetpos,将如何获得文件大小?

_fseeki64/_ftelli64 使用 int64 和 fsetpos/fgetpos 使用的 fpos_t 也是 int64 所以我应该能够对指针进行算术运算。

还是我在这里走错了路?我应该考虑其他方法吗?

4

1 回答 1

1

_fseeki64/_ftelli64 完全按照您的意愿行事,那么您为什么会犹豫使用它们呢?你的方法很好。

于 2012-03-09T18:22:14.100 回答