在处理大文件(> 2GB)时将pos_type分配给uint64_t是否安全?

时间:2012-01-06 10:35:22

标签: c++ winapi stl posix fstream

尝试以跨平台方式处理大型文件(2 / 4GB)时,将pos_type转换为uint64_t是否安全?

  • 目标平台:运行当前Linux发行版,Windows,Mac的桌面计算机。
  • 任务:随机二进制文件访问(tellpseekp)。
  • 寻求:最接近标准的解决方案(POSIX,Win API),便携且安全。

1 个答案:

答案 0 :(得分:3)

在实践中或在理论上。就标准而言,我没有 认为pos_type甚至可以转换为保证 整体类型;从逻辑上讲,它不应该是,因为它包含几个 独立数据:文件开头的偏移量 用于多字节解码的状态信息。

另一方面,在实践中,你不应该有任何问题 基于Unix的机器;在Windows下,数值不一定 如果在文本模式下打开文件意味着很多,但你可以转换一个 pos_typeuint64_t然后返回而不会失去价值(除非那里 在原pos_type中确实是重要的多字节状态,但是我 不知道在Windows下的任何编码,这将是这种情况)。

应该可以在编译时确定是否pos_type 将隐式转换为整数类型,并在某些情况下使用它 static_assert。但是,我不认为这会买得多;它 不会确定积分值是否以任何方式可用,除非 重新转换回pos_type。 (这可能是某种魔力 例如,cookie。但我不会太担心它。该 标准允许很多没有合理实施的东西 做。请记住,即使在Windows下,价值也并非总是如此 表示可以读取的确切字节数。