2012-11-13 18 views
5

İkili bir dosyaya ikilinin bir vektörünü yazmayı deniyorum. Bunu yaptıktan sonra okumak istiyorum. Bu işe yaramıyor. o doğru ilk 4 numara okur gibi görünüyor böylece "...... 0 1 2 3 0 0 0" Bunun çıktısıVektör dosyası <double> için ikili dosyaya yazılıyor ve tekrar okunıyor

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; 
} 

: İşte kodudur.

+3

'Write()' boyut argümanı yanlıştır. V.size() * sizeof (double) 'olmalıdır. – hmjd

+0

@ K-ballo 'swsws' biçimlendirilmemiş girdiye uygulanmaz. –

cevap

7

Bu .write()bayt sayısını alır öğeleri sayısını değil yazmak için:

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

zaten doğru değeri hesaplanır beri ise kullanılır:

bestand.write(pointer, bytes); 
+0

hmjd beni 30 saniyede yener. –

+0

@MagnusHoff Elbette. Sabit. –

+0

Bu çalışma size teşekkür ederiz! Her döngü için aynı dosyaya yeni bir vektör yazarak bir for döngüsüne sahip olduğumu varsayın. Okumak için neyi değiştirmek zorundayım? Ayrıca bu bir for döngüsünde mi? – pivu0

İlgili konular