Fisiere in C++

Page 1

Fişiere în C++ Un fisier este o structura de date prin intermediul careia este organizata informatia pe harddisc. Un fisier text este o colectie de linii de text terminate printr-un indicator special numit sfarsit de linie (EOL – End Of Line) . Sfârşitul fişierului este specificat in fisierul text printr-un indicator special numit sfarsit de fisier (EOF – End Of File) . Operatiile de intrare/ieşire î n C++ se realizează prin intermediul fluxurilor (streamuri). Fluxurile pot fi clasificate î n: ­

fluxuri de intrare/ieşire standard

­

fluxuri de intrare/ieşire folosind fişiere

­

fluxuri de intrare/ieşire î n memorie

De exepmplu fluxul standard de intrare de la tastatura este cin , î n timp ce fluxul standard de iesire pe ecran (monitor) este cout . Î n instrucţiunea cout << x; cout este un obiect de tip flux de ieşire standard. Obiectele cin şi cout sunt declarate î n iostream.h. Utilizatorul î ş i defineşte propriile fluxuri, declarându-le ca obiecte î n clasele: ofstream., pentru operaţii de scriere ifstream, pentru operaţii de citire fstream, pentru operaţii atât de citire, c ît şi de scriere Pentru a folosi aceste clase trebuie inclus fişierul antet fstream.h . Operatiile specifice lucrului cu fisiere text sunt: 1) Declararea fluxului asociat ununi fisier şi deschiderea acestuia: a. pentru scriere b. pentru citire c. in modul adăugare 2) Scrierea sau citirea î n respective dintr-un flux; 3) Î n chiderea fişierului 1) Deschiderea unui fişier (asocierea fişier – stream) se face ori la declararea fluxului de intrare/iesire sau prin functia open() , a cărei antet este: void open(char* numefisier, int mod, int acces); Modul î n care poate fi deschis un fişier este precizat î n clasa ios prin enumeratorii: in

- fişierul se deschide pentru citire; fişierul trebuie să existe

out fişier

- fişierul se deschide pentru scriere; dacă există – se şterge şi se crează un nou

ate

- fişierul se deschide pentru adăugare la sfârşit, dacă nu există – se crează

app

- fişierul se deschide pentru adăugare la sfârşit; fişierul trebuie să existe

trunc

- dacă fişierul există, va fi şters şi se va crea un fişier nou pentru scriere 1


nocreate

- fişierul deschis trebuie să existe (el nu poate fi creat)

noreplace

- fişierul este deschis, iar conţinutul lui nu poate fi î nlocuit

binary

- fişerul deschis va fi prelucrat ca un fişier binar

Exemplu: ifstream f; f.open(”note.dat”, ios::in); Modul de acces poate specifica una din valorile: 0 – fişier fără restricţii de acces 1 – fişier protejat la scriere 2 – fişier ascuns 4 – fişier sistem 8 – fişier arhivă 2) Citirea dintr- un flux sau scrierea într -un flux se realizează asemănător operaţiilor de citire sau scriere î n fluxurile standard de intrare/ieşire cin şi cout dar utilizând propriile fluxuri asociate fişierelor. Exemplul 1: Dacă am declarat fluxul de intrare f pentru a citi valori dintr-un fişier: #include <fstream.h> ... ifstream f(“fisier.txt”); pentru a prelua valori din fisier folosim constructia: f>>a>>b>>c; unde a, b, c reprezintă variabile. Obs. Pentru separarea valorilor dintr-un fisier deobicei se utilizeaza spatiul sau linia noua . Valorile preluate dintr-un fisier pot fi de tipurile de date cunoscute: numere, caractere, tablouri de caractere etc. Exemplul 2: Daca vrem sa scriem intr-un fisier vom declara un flux de iesire atasat unui fisier de pe disc: #include <fstream.h> ... ofstream f(“fisier.txt”); pentru a scrie diferite tipuri de valor in fisier folosim costructia: f<<a<<”Text”<<b<<” ”<<12.5; (s-au scris in fisier pe rand valoarea din variabila a, apoi sirul Text, apoi valarea din variabila b, apoi un spatiu, si in final numarul real 12.5) 3) Închiderea fluxului ataşat unui fişier de intrare sau de ieşire se face prin declaraţia: f.close(); Exemplu de program care scrie un mesaj intr-un fisier si apoi preia din fisier mesajul intr-o variabila tablou de caractere:

#include <fstream.h> 2


void main(){ ofstream out(“iesire.dat”); out << “Vasilica invata C++” << “\n”; out.close(); ifstream in(“intrare.dat”); char linie[80]; in >> linie; in.close(); cout << linie; } Acelasi lucru se poate face si astfel: #include <fstream.h> void main(){ ofstream out; ifstream in; out.open(“iesire.dat”); out << “Vasilica invata C++” << “\n”; out.close(); in.open(“intrare.dat”); char linie[80]; in >> linie; in.close(); cout << linie; } Probleme propuse( tema) : 1) Sa se scrie un program care citeste de la tastatura un tablou de numere intregi pe care le scrie apoi intr-un fisier text tablou.txt , astfel pe prima linie scrieti numarul de valori din tablou iar pe linia a doua separate prin spatii valorile din tablou. 2) Sa se scrie un program care deschide fisierul creat la problema 1) si preia valorile din fisier intr-un tablou de numere intregi, pe care apoi il afiseaza. SPOR LA LUCRU, astept rezolvarea pe site, in conturile voastre, la sectiunea TEME.

3


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.