首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用c++ stl读取大于4 4GB的文件

使用c++ stl读取大于4 4GB的文件
EN

Stack Overflow用户
提问于 2008-11-16 08:14:24
回答 4查看 12.4K关注 0票数 17

几周前,我使用std::ifstream读入一些文件,打开时立即失败,因为文件大于4 4GB。当时我找不到一个合适的答案,为什么它被限制为32位文件大小,所以我用原生操作系统API编写了我自己的。

那么,我的问题是:有没有办法使用std::ifstream/std::ostream (IE:标准c++)来处理大小超过4 4GB的文件?

编辑:使用VC9编译器中的STL实现(Visual Studio2008)。EDIT2:当然,必须有标准的方法来支持大于4 4GB的文件大小。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-11-16 09:01:18

显然,这取决于off_t是如何由库实现的。

#include <streambuf>
__int64_t temp=std::numeric_limits<std::streamsize>::max();

给出当前的最大值是多少。

STLport支持更大的文件。

票数 14
EN

Stack Overflow用户

发布于 2008-11-16 13:52:19

几年前,我在Linux上使用gcc时遇到了这个问题。操作系统支持大文件,C库(fopen等)也支持它,但C++标准库不支持。我发现我必须使用正确的编译器标志重新编译C++标准库。

票数 5
EN

Stack Overflow用户

发布于 2008-11-16 14:41:47

从标准的角度来看,没有什么可以阻止这一点。然而,实际上,大多数32位实现都将32位用于std::size_t。现在,C++标准要求C++标准库中的标准分配器使用std::size_t作为大小数量。因此,容器、字符串和内容的存储空间限制为2^32字节。对于std::off_t来说,情况可能是另一种情况,我不知道到底发生了什么。

您必须直接使用操作系统的原生API或包装它的一些库,才能做到这一点,而不必信任标准库实现,因为标准库实现在很大程度上依赖于实现。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/293672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档