在 C++ 中处理大于 2 GB 的文件与STL
我正在进行二进制文件处理,在我的算法中,我想知道 pos_type 和 off_type 的实际类型,例如在计算文件大小或寻求文件大小时给定位置(tellg
和 seekg
)。
当计算文件的大小时,我只是将 static_cast
的 pos_type
转换为 int64_t
,它似乎工作得很好。
seekg
怎么样?向其传递 int64_t
是否安全?
有没有办法让 pos_type
和 off_type
成为 int64_t
,也许使用 traits
?
我想消除丑陋的强制转换并找到一种符合C++的方法标准。
更新:另请参阅
I am doing binary file processing and in my algorithm I would like to know the actual type of pos_type
and off_type
, for example when computing the size of the file or seeking to a given position (tellg
and seekg
).
When computing the size of the file I just static_cast
the pos_type
to an int64_t
and it seems to work fine.
How about seekg
? Is it safe to pass an int64_t
to it?
Is there a way to make pos_type
and off_type
to be an int64_t
, perhaps using traits
?
I would like to eliminate the hideous cast and find a way that is in accordance with the C++ standard.
Update: see also
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
并非所有编译器都具有支持大文件的 STL 实现。
例如,以下程序:
结果为:
另一方面 STLPort 具有跨平台大文件支持。
Not all compilers have STL implementations with large file support.
For example, the following program:
results in:
On the other hand STLPort has cross platform large file support.
您可能应该使用 std::fpos_t typedef。
You should probably use std::fpos_t typedef.