Domanda

io sto facendo l'elaborazione dei file binari e nel mio algoritmo vorrei sapere il tipo effettivo di pos_type e off_type, per esempio nel calcolo delle dimensioni del file o cerca di una data posizione (tellg e seekg).

Quando si calcola la dimensione del file che ho appena static_cast il pos_type a un int64_t e sembra funzionare bene.

seekg ne dite? E 'sicuro di passare un int64_t ad esso?

C'è un modo per rendere pos_type e off_type per essere un int64_t, magari utilizzando traits ?

Vorrei eliminare il cast orrendo e trovare un modo che è in conformità con il C ++ standard.

Aggiornamento: vedi anche

È stato utile?

Soluzione

Non tutti i compilatori hanno implementazioni STL con il supporto di file di grandi dimensioni.

Ad esempio, il seguente programma:

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

int main()
{
    using namespace std;

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

Risultati in:

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

D'altra parte STLPort ha il supporto cross-platform file di grandi dimensioni.

Altri suggerimenti

Si dovrebbe probabilmente usare std :: fpos_t typedef.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top