当尝试以跨平台方式处理大文件(2/4GB)时,将 pos_type
转换为 uint64_t
是否安全?
- 目标平台:运行当前 Linux 发行版、Windows、Mac 的台式机。
- 任务:随机二进制文件访问(
tellp
和seekp
)。 - 寻求:最接近标准(POSIX、Win API)、便携且安全的解决方案。
最佳答案
无论是在实践中还是在理论上。就标准而言,我不
认为可以保证 pos_type
甚至可以转换为
整型;从逻辑上讲,它不应该是,因为它包含几个
独立数据:距文件开头的偏移量和
多字节解码的状态信息。
另一方面,在实践中,您不应该遇到任何问题
基于 Unix 的机器;在Windows下,数值不一定
如果文件以文本模式打开,则意义重大,但您可以将
pos_type
到 uint64_t
并返回,不会丢失值(除非有
确实是原始 pos_type 中重要的多字节状态,但我
不知道 Windows 下有任何编码会出现这种情况)。
应该可以在编译时确定 pos_type
是否会隐式转换为整型,并在某些情况下使用它
有点像static_assert
。然而,我认为这并没有什么意义。它
不会确定积分值是否以任何方式可用,除了
重新转换回 pos_type
。 (这可能是某种魔法
例如,cookie。但我不会太担心。这
标准允许很多没有合理实现的事情
做。请记住,即使在 Windows 下,该值并不总是
表示可以读取的确切字节数。
关于c++ - 处理大文件(> 2GB)时将 pos_type 分配给 uint64_t 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8756496/