UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 9. Gyakorlat Alap file műveletek
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS fstream A C++ nyelvben a file műveleteket is megvalósíthatjuk Stream-ek segítségével Így az alap file műveletek egyszerűen használhatóak Include-olni kell az fstream header-t, mely tartalmazza az alapvető műveleteket: #include Beolvasáshoz: ifstream Íráshoz: ofstream
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Alapvető megnyitási módok in : a fájlt olvasásra nyitjuk meg (fstream esetében ez az alapértelmezett) out : a fájlt írásra nyitjuk meg (ofstream esetében ez az alapértelmezett) app : hozzáfűzésre nyitjuk meg (append)
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS ofstream Az ofstream osztály segítségével file-ba tudunk adatokat írni. Konstruktorai: ofstream ( );//default konstruktor, a fájl megnyitását később kell végrehajtani ofstream ( const char * filename, ios_base::openmode mode = ios_base::out ); //konstruktor első paramétere a fájl elérési útja, 2. paramétere a megnyitás módja (alapértelmezett: out)
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS ofstream Példányosítás írásra: ofstream out; out.open( fileName ); VAGY ofstream out( fileName); ofstream alapértelmezetten írásra nyitja meg a fájlokat. A fenti használat ugyanaz, mintha így hoztuk volna létre: ofstream out( fileName, ofstream::out);
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS ofstream Példányosítás hozzáfűzésre: ofstream out; out.open( fileName, ofstream::app ); VAGY ofstream out( fileName, ofstream::app );
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS ofstream Használat: int a = 5; double b = 3.4; char* str = ”dfnsknfjksd”; ofstream out( ”out.txt” ); out << a << b << str << endl; out.close(); //le kell zárni
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS ifstream Az ifstream segítségével file-ból tudunk olvasni. Konstruktorai: ifstream ( ); //default konstruktor, a fájl megnyitását később kell végrehajtani ifstream ( const char * filename, ios_base::openmode mode = ios_base::in ); //konstruktor első paramétere a fájl elérési útja, 2. paramétere a megnyitás módja (alapértelmezett: in)
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS ifstream Példányosítás olvasásra: ifstream in; in.open( filename ); VAGY ifstream in( filename );
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS ifstream Használat: ifstream in( ”input.txt” ); int a; double b; in >> a >> b; in.close();
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Egész sor beolvasása ifstream in( ”input.txt” ); char input[ 256 ]; in.getline( input, 256 ); #include ifstream in( ”input.txt” ); string input; getline( in, input );
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Közös függvények is_open() //megadja, hogy nyitva van-e file open(const char * filename, ios_base::openmode mode = ios_base::out ) //megnyitja a file-t (ofstream) open(const char * filename, ios_base::openmode mode = ios_base::in ) //megnyitja a file-t (ifstream) close() //lezárja a file-t eof() //true, ha elértük a file végét
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Kivételkezelés alapjai Az olyan kódrészleteknél, melyek „hibát” eredményezhetnek, érdemes lehet try-catch blokkokat használnunk. A „hibát okozó”, és az azzal közvetlen összefüggésben lévő program részletet tesszük try blokkba. Ekkor, ha hiba történik, lehetőség van egy exception-t (kivételt) dobni (throw). Ezt a kivételt „kaphatjuk el”, és kezelhetjük a catch blokkban.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Kivételkezelés alapjai Példa (kivétel dobása): const int DivideByZero = 10;//a hiba kódja //függvény, mely eloszt két számot double divide(double x, double y) { if(y==0) { //ha az osztó 0 throw DivideByZero; //dob egy kivételt (itt egy 10-es kódú kivételt), és a függvénynek meg is áll a futása } return x/y; //ha nem volt kivétel, végrehajtja az osztást }
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Kivételkezelés alapjai Példa (kivétel elkapása): try { //try blokkba rakjuk az osztás függvényt, hiszen dobhat hibát (előző dia…) divide(10, 0); } catch(int i) { //ha dobott egy int típusú kivételt, azt elkapjuk if(i==DivideByZero) { //ha a kivétel ilyen típusú volt, kiírjuk az errort cerr<<"Divide by zero error"; }