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

Ali*_*Ali 7 c++ fstream stl

我做的二进制文件处理,并在我的算法,我想知道实际类型pos_typeoff_type计算文件的大小或寻求一个给定的位置(例如当tellgseekg).

当计算文件的我只是大小static_castpos_type一个int64_t,它似乎很好地工作.

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

有没有办法制作 pos_type off_type 成为 int64_t,也许使用 traits

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

更新:另见

Cri*_*dam 10

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

例如,以下程序:

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

int main()
{
    using namespace std;

    cout << numeric_limits<streamoff>::max() << endl;
}
Run Code Online (Sandbox Code Playgroud)

结果是:

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

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