2012-11-13 10 views
5

Sto provando a scrivere un vettore di doppio in un file binario. Dopo averlo fatto voglio leggerlo. Questo non sembra funzionare. ecco il codice:Scrivere il file <double> nel file binario e leggerlo di nuovo

ofstream bestand; 
vector<double> v (32); 
const char* pointer = reinterpret_cast<const char*>(&v[0]); 
size_t bytes = v.size() * sizeof(v[0]); 
bestand.open("test",ios::out | ios::binary); 
for(int i = 0; i < 32; i++) 
{ 
    v[i] = i; 
    cout << i; 
    } 
bestand.write(pointer, v.size()); 
bestand.close(); 
ifstream inlezen; 
vector<double> v2 (32); 
inlezen.open("test", ios::in | ios::binary); 
char byte[8]; 
bytes = v2.size() * sizeof(v2[0]); 
inlezen.read(reinterpret_cast<char*>(&v2[0]), bytes); 
for(int i =0; i < 32; i++){ 

cout << endl << v2[i] << endl; 
} 

Emette "0 1 2 3 0 0 0 ......" così sembra si legge correttamente i primi 4 numeri.

+3

L'argomento size 'write()' non è corretto. Dovrebbe essere 'v.size() * sizeof (double)'. – hmjd

+0

@ K-ballo 'skipws' non si applica all'ingresso non formattato. –

risposta

7

Questa .write() prende il numero di byte , non il numero di elementi a scrivere:

bestand.write(pointer, v.size()); 

Dal momento che avete già computato il valore corretto, usarlo:

bestand.write(pointer, bytes); 
+0

hmjd mi ha battuto di 30 secondi. –

+0

@MagnusHoff Naturalmente. Fisso. –

+0

Questo funziona grazie! Supponiamo di avere un ciclo for, scrivendo un nuovo vettore ogni iterazione allo stesso file. Cosa devo cambiare in lettura? Inoltre, ma questo in un ciclo for? – pivu0

Problemi correlati