几周前,我使用std::ifstream读入一些文件,打开时立即失败,因为文件大于4 4GB。当时我找不到一个合适的答案,为什么它被限制为32位文件大小,所以我用原生操作系统API编写了我自己的。
那么,我的问题是:有没有办法使用std::ifstream/std::ostream (IE:标准c++)来处理大小超过4 4GB的文件?
编辑:使用VC9编译器中的STL实现(Visual Studio2008)。EDIT2:当然,必须有标准的方法来支持大于4 4GB的文件大小。
发布于 2008-11-16 09:01:18
显然,这取决于off_t
是如何由库实现的。
#include <streambuf>
__int64_t temp=std::numeric_limits<std::streamsize>::max();
给出当前的最大值是多少。
STLport支持更大的文件。
发布于 2008-11-16 13:52:19
几年前,我在Linux上使用gcc时遇到了这个问题。操作系统支持大文件,C库(fopen等)也支持它,但C++标准库不支持。我发现我必须使用正确的编译器标志重新编译C++标准库。
发布于 2008-11-16 14:41:47
从标准的角度来看,没有什么可以阻止这一点。然而,实际上,大多数32位实现都将32位用于std::size_t
。现在,C++标准要求C++标准库中的标准分配器使用std::size_t作为大小数量。因此,容器、字符串和内容的存储空间限制为2^32字节。对于std::off_t
来说,情况可能是另一种情况,我不知道到底发生了什么。
您必须直接使用操作系统的原生API或包装它的一些库,才能做到这一点,而不必信任标准库实现,因为标准库实现在很大程度上依赖于实现。
https://stackoverflow.com/questions/293672
复制相似问题