【问题标题】:fast access into large file - fseek ftell fsetpos fgetpos快速访问大文件 - fseek ftell fsetpos fgetpos
【发布时间】:2023-03-09 04:37:01
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: winapi fseek ftell


    【解决方案1】:

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

    【讨论】:

    • 终于有时间完成这个了。没有遇到任何问题。效果很好,因为我文件中的所有记录大小都差不多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多