2010-12-10 19 views
7

Estoy haciendo procesamiento de archivos binarios y en mi algoritmo me gustaría saber el tipo real de pos_type y off_type, por ejemplo al calcular el tamaño del archivo o buscar un determinado posición (tellg y seekg).Procesando archivos de más de 2 GB en C++ con STL

Al calcular el tamaño del archivo acabo de static_castpos_type a int64_t y parece funcionar bien.

¿Qué tal seekg? ¿Es seguro pasarle un int64_t?

¿Hay una manera de hacerpos_typeyoff_typepara ser unint64_t, tal vez usandotraits?

Me gustaría eliminar el elenco horrible y encontrar un camino que esté de acuerdo con el estándar C++.

Actualización: véase también

+0

¿Qué plataforma/versión? – Joe

+0

Plataforma de manera independiente :) – Ali

+5

Este tipo de pregunta no puede responderse de una manera independiente de la plataforma, ya que cada plataforma puede elegir libremente sus propios límites. –

Respuesta

10

No todos los compiladores tienen implementaciones STL con soporte de archivos grandes.

Por ejemplo, el siguiente programa:

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

int main() 
{ 
    using namespace std; 

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

resultados en:

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

Por otro lado, STLPort tiene soporte para archivos grandes multiplataforma.

1

que es mejor usar std :: fpos_t typedef.

+0

Está en ctsdio y no puedo ver cómo podría usarlo con fstream. – Ali

Cuestiones relacionadas