Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Binary kirjoitus ja Vektori taulukot

kayttaja-3842 [20.05.2008 15:27:38]

#

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?

Metabolix [20.05.2008 16:23:05]

#

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

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta