Jäsenistö ei enää paljoa pysty tehtäviään välttelemään:
//-------------------------------------------------------------------------
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);
}
...
//-------------------------------------------------------------------------
string cJasenet::talleta(const string &tied)
{
if ( !muutettu ) return "";
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 "";
}
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.