使用STL在C ++中处理大于2 GB的文件

时间:2010-12-10 01:09:05

标签: c++ stl fstream

我正在进行二进制文件处理,在我的算法中,我想知道pos_typeoff_type的实际类型,例如在计算文件大小或寻找给定位置时( tellgseekg)。

在计算文件大小时我只需static_cast pos_typeint64_t,它似乎工作正常。

seekg怎么样?将int64_t传递给它是否安全?

有没有办法让 pos_type off_type 成为 int64_t可能正在使用 traits

我想消除这个可怕的演员并找到一种符合C ++标准的方式。

更新:另见

2 个答案:

答案 0 :(得分:10)

并非所有编译器都具有大文件支持的STL实现。

例如,以下程序:

#include <fstream>
#include <iostream>
#include <limits>

int main()
{
    using namespace std;

    cout << numeric_limits<streamoff>::max() << endl;
}

结果:

  • VS2005 - 2147483647
  • VS2008 - 2147483647
  • VS2010 - 9223372036854775807
  • MinGW GCC 4.4.0 - 9223372036854775807

另一方面,STLPort具有跨平台大文件支持。

答案 1 :(得分:1)

您应该使用std :: fpos_t typedef。