【发布时间】:2012-01-16 02:48:39
【问题描述】:
我需要使用 C 访问一个大于 2gb 的文件。在一次程序运行期间,将从文件中读取可变数量的字节并保存下一个位置的位置。在程序的下一次运行期间,将读取文件位置并从该位置开始读取多个字节。
复杂之处在于,有时可能会通过将文件复制到新文件来“压缩”文件,减去已读取的任何字节(我认为复制是唯一的方法)。这样删除的字节数也会被保存。
我需要知道文件从原始开始的当前位置,以便与另一个文件同步。这应该很容易,因为它只是 (current_offset + deleted_bytes)。
不容易的原因是 fseek 只使用 long int 索引,将文件限制为 2gb,而 fsetpos 使用 fpos_t 结构作为位置索引,它不是数字,不能来回转换为一。我不知道有什么方法可以使用 long long int 索引进行文件定位,这将是理想的解决方案。
我该怎么办?
【问题讨论】:
-
哪个平台?
ftello()和fseeko()可能是一个选项。 -
ftello 和 fseeko 将与 POSIX.1 兼容,但 >2GB 也是文件系统相关问题。
标签: c windows visual-studio