Eli tein tiedoston .dat ja luultavasti paras tapa tehdä tallennus on joka riville tallentaa jotai tiettyä esim tyyliin:
tallennuksenaika
pelaaja.ase
pelaaja.x
pelaaja.y
ja se tallentuisi slot_1.dat tiedostoon näin:
12.12.2010.
1
50
140
En tiedä miten lähtisi toteuttamaan.
Ja miten ne sitten luetaan slot_1.dat tiedostosta?
Perus tiedostojen käsittelyllä, muistaakseni sua on käsketty opetella tuota jo about 50 kertaa...
Hae vaikka kirjastosta kirja ja lue siitä. Ei ole sen vaikeampaa. Tekemällä oppii.
Luin erillaisia koodivinkkejä mutta nissää opetettiin vain tietojen ottaminen tiedostosta mutta ei tallentamista. Voisiko joku antaa hyvän vinkin netistä kun en itse löytänyt mitään parempaa.
#include <fstream> int main() { std::ofstream fout("tiedosto.txt", std::ios::out); if(fout) { //laitetaan luku 12 tiedostoon fout<<12<<std::endl; //laitetaan vielä vähän tekstiä sinne fout<<"tekstiä"<<std::endl; } fout.close(); return 0; }
Esimerkiksi vielä vaikkapa 'Pelaaja' luokan tallennus.
#include <fstream> #include <string> #include <stdexcept> class Pelaaja{ private: std::string nimi; int taso; int x; int y; public: Pelaaja(std::string n, int t, int x, int y){ this->nimi = n; this->taso = t; this->x = x; this->y = y; } void Tallenna(){ std::ofstream ulos("pelaaja.txt", std::ios::out); if(ulos){ ulos << this->nimi << std::endl; ulos << this->taso << std::endl; ulos << this->x << std::endl; ulos << this->y << std::endl; }else{ throw std::runtime_error("Tiedoston avaus ei onnistunut!"); } } void Lataa(){ std::ifstream sisaan("pelaja.txt", std::ios::in); if(sisaan){ sisaan >> this->nimi; sisaan >> this->taso; sisaan >> this->x; sisaan >> this->y; }else{ throw std::runtime_error("Tiedoston avaus ei onnistunut!"); } } }; int main(int kpl, char** argumentit){ Pelaaja peluri("Juha", 12, 87, 53); try{ peluri.Lataa(); }catch(std::exception& e){ std::cout << e.what() << std::endl; } try{ peluri.Tallenna(); }catch(std::exception& e){ std::cout << e.what() << std::endl; } return EXIT_SUCCESS; }
Ekalla ajolla pitäisi heittää virhe puuttuvasta tiedostosta latauksen yhteydessä ja pelurilla pitäisi olla annetut tiedot jäsenmuuttujissaan. Toisella vedolla latauksen pitäisi onnistua, jos ei tullut isoja mokia. Tämä on kirjoitettu duunissa ilman kääntäjää, joten virheitä voi olla.
Koodia ei pidä ihan kauheasti muutella, jotta alkaa toimimaan. Ekana pitää lisätä puuttiuva otsikko iostream. Lisäksi Lataa metodiin pitää kirjoittaa oikean tiedoston nimi pelaja.txt asemasta pelaaja.txt. Näillä muutoksilla tuo tallentaa olion tiedot tiedostoon aivan oikein.
Aihe on jo aika vanha, joten et voi enää vastata siihen.