This shows you the differences between two versions of the page.
poo-is:laboratoare:10 [2020/10/08 17:33] ruben_gilian.udroiu [3. Stream] |
poo-is:laboratoare:10 [2020/10/12 15:14] (current) ruben_gilian.udroiu [3. Stream] |
||
---|---|---|---|
Line 281: | Line 281: | ||
=== 3.2. ifstream, ofstream si fstream === | === 3.2. ifstream, ofstream si fstream === | ||
Pentru deschiderea de fisiere putem folosi constructorii cu/fara parametri pusi la dispozitie pentru toate tipurile de fisiere (intrare, iesire si intrare-iesire) | Pentru deschiderea de fisiere putem folosi constructorii cu/fara parametri pusi la dispozitie pentru toate tipurile de fisiere (intrare, iesire si intrare-iesire) | ||
- | + | ||
- | ofstream::ofstream(const char*nume, int mod=ios::out, int acces=0) | + | ofstream::ofstream(const char*nume, int mod=ios::out, int acces=0) |
- | nume - numele fisierului | + | nume - numele fisierului |
- | mod - modul de acces | + | mod - modul de acces |
- | acces - tipul de protectie/acces | + | acces - tipul de protectie/acces |
- | + | ||
- | exemplu : ofstream ofis("date1.txt",ios::app); | + | Exemplu: |
- | + | ofstream ofis("date1.txt",ios::app); | |
Modurile (preferinite in clasa ios) sunt: | Modurile (preferinite in clasa ios) sunt: | ||
- | ios::in - intrare | + | *ios::in - intrare |
- | ios::out - iesire | + | *ios::out - iesire |
- | ios::ate - deschidere cu pozitionare la sfarsitul fisierului | + | *ios::ate - deschidere cu pozitionare la sfarsitul fisierului |
- | ios::app - append, adaugare la sfarsitul fisierului | + | *ios::app - append, adaugare la sfarsitul fisierului |
- | ios::binary - deschidere in mod binar | + | *ios::binary - deschidere in mod binar |
- | Nota: modurile pot fi combinate cu SAU logic la nivel de bit (|) | + | <note>Modurile pot fi combinate cu SAU logic la nivel de bit (|) |
- | + | ||
- | acces = 0 - normal | + | |
- | = 1 - read-only | + | |
- | = 2 - hidden | + | |
- | = 3 - sistem | + | |
+ | **Acces** | ||
+ | *0 - normal | ||
+ | *1 - read-only | ||
+ | *2 - hidden | ||
+ | *3 - sistem | ||
+ | </note> | ||
+ | |||
Se poate folosi si functia cu efect similar: | Se poate folosi si functia cu efect similar: | ||
- | void open (const char *nume_fisier, int mod, int acces) | + | void open (const char *nume_fisier, int mod, int acces) |
- | In urma deschiderii, este indicata testarea pentru erori : | + | In urma deschiderii, este indicata testarea pentru erori: |
- | if(!numefis) cout << "eroare"; | + | if (!numefis) cout << "eroare"; |
+ | |||
+ | Pentru inchiderea unui fisier, se foloseste functia "**void close();**", functie ce este apelata de destructorul claselor ce lucreaza cu fisiere, deci fisierul va fi inchis **automat** la finalul duratei de viata a variabilei de tip fisier. | ||
- | Pentru inchiderea unui fisier, se foloseste functia "void close();", functie ce este apelata de destructorul claselor ce lucreaza cu fisiere, deci fisierul va fi inchis *automat* la finalul duratei de viata a variabilei de tip fisier. | + | Putem citi o linie dintr-un fisier text (sau cin) cu functia: |
- | + | getline(unsigned char *buf, int l, char delim); | |
- | Putem citi o linie dintr-un fisier text (sau cin) cu functia : | + | |
- | + | Functia **getline** citeste in buf cel mult **l-1** caractere, pana la intalnirea caracterului **delim**, care este implicit **'\n'(newline)** si pune **'\0'** la sfarsitul liniei citite. | |
- | getline(unsigned char *buf, int l, char delim); | + | |
- | + | ||
- | Functia getline citeste in buf cel mult l-1 caractere, pana la intalnirea caracterului delim, care este implicit '\n'(newline) si pune '\0' la sfarsitul liniei citite. | + | |
Exemplu: | Exemplu: | ||
- | ifstream ifis("date2.dat"); | + | ifstream ifis("date2.dat"); |
- | char buf[256]; | + | char buf[256]; |
- | while(!ifis.eof()) { | + | while(!ifis.eof()) { |
ifis.getline(buf, 256, '\n'); | ifis.getline(buf, 256, '\n'); | ||
cout << buf << endl; | cout << buf << endl; | ||
- | } | + | } |
- | *A se consulta cursul pentru mai multe exemple | + | <note important>A se consulta cursul pentru mai multe exemple!</note> |
- | Fisiere binare | + | ==Fisiere binare== |
In cazul fisierelor binare, nu se pot folosi functiile obisnuite de citire/scriere deoarece datele nu sunt formatate in vreun fel anume. | In cazul fisierelor binare, nu se pot folosi functiile obisnuite de citire/scriere deoarece datele nu sunt formatate in vreun fel anume. | ||
- | Clasele specializate pentru fisiere binare includ doua functii pentru citirea si scrierea secventiala : write si read | + | Clasele specializate pentru fisiere binare includ doua functii pentru citirea si scrierea secventiala: |
- | + | -**write** | |
- | istream& read(unsigned char *buf, intn); | + | -**read** |
- | ostream& write(constunsigned char *buf, intn); | + | |
- | + | istream& read(unsigned char *buf, intn); | |
- | Functiile citesc/scriu din/in fisierul respectiv n octeti in/din buf | + | ostream& write(constunsigned char *buf, intn); |
- | + | ||
- | Pozitionarea absoluta in fisierul binar este realizata de metodele seekg (citire din ifstream) si seekp(scriere in ofstream) : | + | |
- | ifstream& seekg(long poz, int reper); | + | Functiile citesc/scriu din/in fisierul respectiv **n octeti** in/din buf |
- | ofstream& seekp(long poz, int reper); | + | |
- | poz = pozitia in octeti | + | Pozitionarea absoluta in fisierul binar este realizata de metodele **seekg** (citire din **ifstream**) si **seekp** (scriere in **ofstream**): |
- | reper poate fi una dintre constantele : ios::beg (pozitionare fata de inceput), ios::cur (fata de pozitia curenta), ios::end(fata de sfarsit); | + | |
+ | ifstream& seekg(long poz, int reper); | ||
+ | ofstream& seekp(long poz, int reper); | ||
+ | poz = pozitia in octeti | ||
+ | Reper poate fi una dintre constantele: | ||
+ | ios::beg (pozitionare fata de inceput) | ||
+ | ios::cur (fata de pozitia curenta) | ||
+ | ios::end (fata de sfarsit) |