19.1.3 Jäsenistön osuus talletuksesta
Jäsenistö ei enää paljoa pysty tehtäviään
välttelemään:
talletus.2\jasenet.cpp - talletus
//-------------------------------------------------------------------------
int cJasenet::TeeBak(const string &bak_tark)
{
bak_nimi = Tiedoston_nimi();
vaihda_tarkennin(bak_nimi,bak_tark);
remove(bak_nimi); /* Vanha .BAK täytyy poistaa jotta rename toimii */
return rename(Tiedoston_nimi(),bak_nimi);
}
...
//-------------------------------------------------------------------------
const char *cJasenet::talleta(const string &tied)
{
if ( !muutettu ) return NULL;
string tiedosto(tied); if ( tied == "" ) tiedosto = tiedoston_nimi;
ofstream f(tiedosto.c_str());
if ( !f ) return TIED_EI_AUKEA;
f << koko_nimi << endl;
f << max_lkm << endl;
if ( !f ) return OTS_EI_KIRJ;
for (int i=0; i<lkm; i++) {
f << *alkiot[i] << endl;
if ( !f ) return ALKIO_EI_KIRJ;
}
muutettu = 0;
tiedoston_nimi = tiedosto;
return NULL;
}
Myös kommentit kannattaisi tavalla tai toisella siirtää vanhasta
alkuperäisestä tiedostosta. Tätä varten voisimme
kirjoittaa aliohjelman
kopioi_kommentit(f,bak_nimi)
Myöhemmin ehkä käytännössä huomataan, että
olisi siistimpää tulostaa kenttiä hieman
täsmällisemmin allekkain - kuten alkuperäisessä
suunnitelmassa oli. Tämä voitaisiin toteuttaa mallirivin avulla,
missä mallirivi on alkuperäisen tiedoston kommenteista luettu rivi.
Tästä rivistä tutkitaan erotinmerkkien paikkoja ja
pyritään saamaan erotinmerkit vastaaviin paikkoihin myös
tulosjonossa.