tietovirrat

Tiedon lukeminen ja kirjoittaminen tietovirtojen (stream) avulla

Koska C++ on olio-ohjelmointikieli, on tietostojen käsittely tehty oliomaiseksi mukaiseksi. Ideana on että ohjelmoija luo tietovirran, josta voidaan lukea tai johon voidaan kirjoittaa tietoa.

Käyttö:

#include <fstream>

using namespace std;

int main()

{

const char nimi[] = "testitiedosto.txt";

ifstream fi(nimi); // Luodaan tietovirta (stream) luettavalle tiedolle.

int muuttuja;

fi >> muuttuja; // Luetaan tietoa tietovirrasta muuttujaan.

fi.close(); // Suljetaan tietovirta.

ofstream fo(nimi); // Luodaan tietovirta (stream) kirjoitettavalle tiedolle.

const char lauseke[] = "jotain tekstiä...";

fo << lauseke; // Kirjoitetaan lauseke tietovirtaan.

fo.close(); // Suljetaan tietovirta.

}

Esimerkissä tapahtuu:

    1. Määritellään merkkijono, joka sisältää tiedoston nimen.

    2. Avataan tietovirta luettavalle tiedolle.

    3. Luodaan muuttuja, johon luetaan arvo fi-tietovirrasta.

    4. Suljetaan fi-tietovirta.

    5. Avataan tietovirta kirjoitettavalle tiedolle.

    6. Määritellään merkkijono, joka kirjoitetaan fo-tietovirtaan.

    7. Suljetaan fo-tietovirta.

Parametrit (ei pakollisia) annetaan muodostimelle, tiedostonimen jälkeen:

fstream tvirta("tiedosto.txt", ios::out | ios::app);

Tämä avaa tiedosto.txt nimisen tiedoston kirjoitusmoodissa siten, että uusi teksti lisätään olemassa olecvan loppuun.

Avatun tietovirran testaaminen

On tärkeätä selvittää onnistuiko tietovirran avaaminen. Tämä tapahtuu good()-funktion avulla:

if (!tvirta.good()) {

cerr << "Virhe: tiedosto.txt avaaminen epäonnistui!" << endl;

exit(1);

}

Tämä esimerkki tulostaa virhetilanteessa tekstin ja lopettaa ohjelman toiminnan.

Avatun tietovirran koon selvittäminen

Yksi yleinen tehtävä on selvittää avatun tiedoston koko.

Tämä tapahtuu C++:n tietovirroilla seuraavasti (olettaen että fi on ifstream-tietovirta):

fi.seekg(0, ios::end);

int koko = fi.tellg();

fi.seekg(0, ios::beg);

Tämä esimerkki tallentaa koko-muuttujaan tiedoston koon ja siirtää osoittimen tiedoston alkuun.