开发者

Processing files larger than 2 GB in C++ with STL

开发者 https://www.devze.com 2023-01-29 14:36 出处:网络
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 (tel

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

  • Is it safe to assign pos_type to uint64_t when dealing with large files (> 2GB)?

  • iostream and large file support


Not all compilers have STL implementations with large file support.

For example, the following program:

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

int main()
{
    using namespace std;

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

results in:

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

On the other hand STLPort has cross platform large file support.


You should probably use std::fpos_t typedef.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号