file di elaborazione maggiori di 2 GB in C ++ con STL
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
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.