C++-kieli‎ > ‎

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.

Comments