我需要使用C语言访问一个大于2GB的文件。程序每次运行时会从文件中读取可变数量的字节,并保存下一位置的信息。下一次运行程序时,将读取文件位置并从该位置开始读取一定数量的字节。
问题在于,有时候文件可能会被“压缩”,即将其复制到一个新文件中,减去已经读取的任何字节(我认为只有复制才能做到这一点)。以这种方式删除的字节数也将被保存。
我需要知道文件当前位置距离原始起点的距离,以便与另一个文件同步。这应该很容易,因为它只是(当前偏移量+删除的字节数)。
问题在于fseek只使用长整型索引,限制文件大小为2GB,而fsetpos使用fpos_t结构作为位置索引,它不是数字,不能相互转换。我不知道如何使用long long int索引进行文件定位,这将是理想的解决方案。
我该怎么办?
问题在于,有时候文件可能会被“压缩”,即将其复制到一个新文件中,减去已经读取的任何字节(我认为只有复制才能做到这一点)。以这种方式删除的字节数也将被保存。
我需要知道文件当前位置距离原始起点的距离,以便与另一个文件同步。这应该很容易,因为它只是(当前偏移量+删除的字节数)。
问题在于fseek只使用长整型索引,限制文件大小为2GB,而fsetpos使用fpos_t结构作为位置索引,它不是数字,不能相互转换。我不知道如何使用long long int索引进行文件定位,这将是理想的解决方案。
我该怎么办?
ftello()
和fseeko()
可能是一个选项。 - Jonathan Leffler