Terve vaan,
Joo elikkäs sellaista tässä vaan, että eikös pitäisi olla täysin mahdollista kirjoittaa vektori taulukko tiedostoon muistiin?
Eli olen nytten koittanut kirjoittaa tietoja tiedostoon seuraavasti:
//Structit struct vertex{ float x; float y; float z; }; struct triangle{ vertex VerX; vertex VerY; vertex VerZ; };
vector<vertex> vecVer = model.getVerVec(); vector<triangle> vecTri = model.getTriVec(); fstream File("out.emf", ios::in | ios::out | ios::binary); File.write((char*)&vecVer, sizeof(vecVer)); File.write((char*)&vecTri, sizeof(vecTri)); //File.write((char*)&model, sizeof(model)); File.close();
...jostain syystä tieto on vain väärän laista?
Et halua kirjoittaa tiedostoon vektoria (joka sisältää lähinnä osoittimia sun muuta) vaan sen sisällön.
if (vektori.size()) { File.write( (const char*) &(vektori[0]), // Ensimmäisen alkion osoite vektori.size() * sizeof(vektori[0]) // määrä * koko ); }
Lukeminen tuosta takaisin ei onnistukaan suoraan, koska mistään ei tiedetä, montako alkiota tiedostoon tallennettiin. On siis syytä tallentaa ensin myös vektorin koko.
// Kirjoitus int koko = vektori.size(); File.write((const char *) &koko, sizeof(koko)); if (vektori.size()) { File.write( (const char*) &(vektori[0]), vektori.size() * sizeof(vektori[0]) ); } // Luku int koko; File.read((char *) &koko, sizeof(koko)); vektori.resize(koko); // Varataan tilaa if (vektori.size()) { File.read( (char*) &(vektori[0]), vektori.size() * sizeof(vektori[0]) ); }
Aihe on jo aika vanha, joten et voi enää vastata siihen.