12

C++ Fajlkezeles

Embed Size (px)

DESCRIPTION

VC++ file handling

Citation preview

Page 1: C++ Fajlkezeles
Page 2: C++ Fajlkezeles

Fájlkezelés

Page 3: C++ Fajlkezeles

Fájlból beolvasás: ifstream

• Az ifstream osztály az std névtér része

• Az istream-ből származik

• Ennek következtében hasonlóan működik, mint a cin

Page 4: C++ Fajlkezeles

Alap függvények ifstream(); Alapértelmezett konstruktor, létrehoz egy példányt.

explicit ifstream (const char* filename,

ios_base::openmode mode = ios_base::in);

Paraméteres konstruktor, a paraméterben név alapján megadott fájlt meg is nyitja.

void open (const char* filename,

ios_base::openmode mode = ios_base::in);

Megnyitja a megadott fájlt. Akkor van értelme, ha nem a paraméteres konstruktort használtuk.

bool is_open();

Viszzaadja, hogy van-e megnyitva fájl. Hamis lehet, ha: a) Az alapértelmezett konstruktort használtuk, de

még nem hívtuk meg az open() függvényt; b) A megnyitásra megadott fájlt nem lehet

megnyitni.

Page 5: C++ Fajlkezeles

Alap függvények

void close(); Bezárja a megynitott fájlt.

istream& operator>> (…); Ahogy bármilyen istream osztályból, innen is ezzel az operátorral lehet beolvasni.

bool eof() const; Igazzal tér vissza, ha elértük a fájl végét.

bool good() const;

Igazzal tér vissza, ha a fájlból lehet olvasni. Hamis lesz akkor is, ha elértük a fájl végét, viszont más hibákra is reagál.

istream& getline (istream& is,

string& str);

Bekér egy egész sort a megadott string-be Nem tagfüggvény, simán az std névtérhez tartozik.

Page 6: C++ Fajlkezeles

Fájlmegnyitás ifstream input;

input.open(“input.txt”);

if (input.is_open())

{

......

input.close();

}

// Vagy:

ifstream input(“input.txt”);

if (input.is_open())

{

......

input.close();

}

Page 7: C++ Fajlkezeles

Beolvasás string str;

while (input.good()) // A ‘good’ jelzi, hogy még nem volt hiba

{

getline(input, str); // Sorokat olvas be

cout << str << endl;

}

// Vagy:

while (!input.eof()) // Figyelem, az ‘eof’ azt jelzi, ha a végén vagyunk

{

input>>str; // A szóközöknél is elválaszt

cout << str << endl;

}

Page 8: C++ Fajlkezeles

Beolvasás

• Akár a getline-t használjuk, akár a >> operátort, oda kell figyelni a részletekre

• Ha a fájl végén van új sor, akkor az utolsó értelmes beolvasás nem ér el a fájl végére, hanem lesz még egy

• Ha a getline előtt használtunk más beolvasást, lehet hogy a bentmaradt ‘\n’ miatt az első getline értéke üres sztring lesz

Page 9: C++ Fajlkezeles

Gyakorló feladat

Page 10: C++ Fajlkezeles

Gyakorló feladat

• A Mercedeses feladat módosítása:

• Készíts a main.cpp-be egy readInput függvényt, amely beolvassa az adatokat az input.txt fájlból.

• A fájl BClass illetve CClass objektumokat tartalmaz, amit a sor elején lévő szöveg ad meg. A sor többi része az ár, fogyasztás, motor típusa, ajtók száma, és a motor mérete ilyen sorrendben.

• A beolvasás végét * karakter jelöli.

Page 11: C++ Fajlkezeles

Gyakorló feladat

• BClass típus beolvasásakor a javítások listája következik leírás, évszám, költség sorrendben. Egy sor egy javítást tartalmaz. A javítások listáját * karakter zárja.

• CClass beolvasása esetén a felszerelések listája következik, soronként egy. A listát itt is a * karakter zárja.

Page 12: C++ Fajlkezeles

Gyakorló feladat

• Készítsen a main.cpp-be egy sablon printList függvényt, ami a paraméterként megkapott List objektum elemeit jeleníti meg. A List tetszőleges típusú adatokat tartalmazhat, ez a típus a függvény sablon paramétere is.