C++ streamek műveletei

A leírásban szereplő változók deklarációi:

ifstream fin;
ofstream fout;
istringstream sin;
ostringstream sout;
istream ins;
ostream outs;
const char* fname;  // nem string!
int mode, n;
string str;
char ch;

A fájlok műveleteihez az <fstream>, a stringstreamek műveleteihez a <sstream> fejlécfájlok kellenek.

Szintaxis Jelentés
Fájlok: deklaráció, megnyitás, bezárás
ifstream fin;
ofstream fout;
Megnyitás nélküli deklaráció, kell utána open
ifstream fin(fname);
ifstream fin(fname, mode);
Deklaráció és megnyitás egyben. Ha a mode nincs megadva, ios_base::in az alapértelmezés.
ofstream fout(fname);
ofstream fout(fname, mode);
Deklaráció és megnyitás egyben. Ha a mode nincs megadva, ios_base::out | ios_base::trunc az alapértelmezés.
fin.open(fname);
fin.open(fname, mode);
Megnyitás, mode alapértelmezett értéke ios_base::in.
fout.open(fname);
fout.open(fname, mode);
Megnyitás, mode alapértelmezett értéke ios_base::out | ios_base::trunc.
fin.close();
fout.close();
Bezárás
Stringek
istringstream sin;
ostringstream sout;
Deklaráció üres stringgel
istringstream sin(str); Deklaráció, az olvasó műveletek az str stringből fognak olvasni
ostringstream sout(str);
ostringstream(str, mode);
Deklaráció, az eredmény string kezdő tartalma az str string. A mode alapértelmezett értéke ios_base::out. Ehelyett gyakran a ios_base::out | ios_base::app érték kell.
sin.str(str); A további olvasó műveletek az str stringből fognak olvasni
str = sout.str(); Lekérdezi az eddig kiírások eredményeként előállt stringet.
A mode paramétert jelzőbitekből kell összerakni bináris vagy művelettel (egy darab | a jele). A jelzőbitek:
ios_base::in Megnyitás olvasásra
ios_base::out Megnyitás írásra
ios_base::trunc A régi tartalom törlése írásra megnyitáskor (truncate)
ios_base::app A régi tartalomhoz hozzáfűzés minden íráskor (append)
ios_base::ate Megnyitáskor a régi adatsor végétől kezdődik az írás (at end)
ios_base::binary Íráskor, olvasáskor a sorvége jelek átalakításának kikapcsolása
Állapot lekérdezése, módosítása (minden író ill. olvasó művelet csak good állatpoban csinál valamit!)
stream.good() Használható a stream
stream.fail() Hiba történt az utolsó művelet során
stream.bad() Kijavíthatatlan hiba történt az utolsó művelet során
stream.eof() A legutolsó művelet során elérte a stream a fájl végét (end of file)
stream.clear() Visszaállítja good-ra a stream állapotát
Formázatlan írás, olvasás
ch = ins.get(); Beolvas egy karaktert, függvény eredményként adja vissza (így bármely kifejezésben használható). Ha nem sikerült (fájl vége), akkor az EOF konstans értéket adja vissza.
ins.get(ch); Beolvas egy karaktert, eltárolja a ch változóban. Fájl vége esetén az EOF konstans értéke kerül ch-ba.
outs.put(ch); Kiírja a ch karaktert.
Formázott írás, olvasás
ins >> var; A var változóba próbál értéket beolvasni, a változó típusa alapján értelmezve a szöveg formáját
getline(ins, str); Beolvas egy sort az str változóba. A sorvége jelet is beolvassa, de nem teszi bele a változóba.
outs << var; A var változó értékét írja ki, a típusának megfelelő formában
Manipulátorok (módosítók) az <iomanip> fejlécfájlból
outs << showpoint << ...
outs << noshowpoint << ...
Valós típusú, egész értékű számok kiírásakor showpoint után kiírja a 0 értékű törtrészt, különben nem
outs << showpos << ...
outs << noshowpos << ...
Számok kiírásakor showpos után kiírja a pozitív előjelet, különben nem
outs << dec << ...
outs << hex << ...
outs << oct << ...
Egész számok tizes, tizenhatos ill. nyolcas számrendszerben való kiírásának beállítása
outs << showbase << ...
outs << noshowbase << ...
Nem tizes számrendszer esetén showbase után megjeleníti a számrendszer jelét (0 ill. 0x prefix), különben nem
outs << setprecision(n) << ... Valós számok kiírásakor n tizedes jegyet fog kiírni
outs << setw(n) << ... A következő adatot (a továbbiakat nem!) n karakter szélesen fogja megjeleníteni (set width)
outs << setfill(ch) << ... Ha egy adat nem tölti ki a kellő szélességet, akkor ch karakterekkel fogja kipótolni a helyet (alapértelmezés: space)
outs << left << ...
outs << right << ...
outs << internal << ...
A kellő szélesség kitöltése során balra ill. jobra igazítja az adatot; internal esetén az előjel és a szám közé teszi a kitöltő karaktereket (csak szám típus esetén).
outs << endl
outs << flush
Kiürítik a puffert, valamint az endl egy sorvége jelet is kiír
ins >> skipws >> ...
ins >> noskipws >> ...
Beolvasás során noskipws után a helyköz karaktereket is beolvassák a formázott karakterolvasó műveletek, különben átlépik őket
ins >> ws >> ... Átlépi a bevezető helyköz karaktereket
ins >> setw(n) >> ... A következő string beolvasás során (a továbbiakban nem!) legfeljebb n karaktert olvas be