我面临着提供对千兆字节文件中选定数据的某种快速访问的问题。一旦找到起始点,后续的访问就会是顺序的。这些文件在每条记录的前面都包含一个日期,并且日期在整个文件中逐渐增加。我不想从头开始并通读文件而忽略前面的内容。我只对 WINDOWS 应用程序感兴趣。我想以文本模式打开该文件。
我想到我可以使用 64 位 fseek/ftell 或 fsetpos/fgetpos 函数进行某种二分搜索。我意识到我可能会寻找换行符分隔记录的中间,但人们会认为您可以通过 fgets 调用简单地跳过任何部分记录。
fseek 提供了原始 SEEK_END 机制,因此似乎可以与 ftell 一起使用来确定文件大小。我没有看到与 fsetpos/fgetpos 类似的功能。如果使用 fsetpos/fgetpos,如何获取文件大小?
_fseeki64/_ftelli64 使用 int64,fsetpos/fgetpos 使用的 fpos_t 也是 int64,所以我应该能够对指针进行算术运算。
还是我走错了路?我应该考虑其他方法吗?
最佳答案
_fseeki64/_ftelli64 完全按照您的意愿行事,那么您为什么犹豫使用它们呢?你的方法很好。
关于winapi - 快速访问大文件 - fseek ftell fsetpos fgetpos,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9633691/