Sunteți pe pagina 1din 3

Fiierele n C++

Definiie: Un fiier este o colecie de date de acelai tip , memorate pe suport extern.
Avantajele utilizrii fiierelor sunt o consecin a proprietilor memoriilor externe. Fiierele permit
memorarea unui volum mare de date persistente(care nu se pierd la ncheierea execuiei programului sau la
nchiderea calculatorului.)
Fiierele pot fi clasificate dup coninutul lor astfel:
-fiiere text :care conin o secven de caractere ASCII structurate pe linii;
- fiiere binare: conin o secven de octei , fr o structur predefinit.
Noi vom studia modul de utilizare a fiierelor text.
Fiiere text n limbajul C++
Declararea fiierelor
Operaiile de intrare/ieire n limbajul C++ au utilizat pn acum stream-urile cin i cout, care erau automat
asociate tastaturii, respectiv ecranului. Pentru ca un program s poat citi informaii dintr-un fiier, respectiv
s scrie informaii ntr-un fiier , trebuie s asociem fiierul respectiv unui stream de intrare/iesire.
n fiierul antet fstream.h sunt declarate clasele ifstream, ofstream i fstream. Pentru a utiliza ntr-un
program operaii de ntrare/ieire folosind fiiere trebuie declarate variabile de tipurile ifstream, ofstream sau
fstream. Mai exact:
Ifstream-declarare stream de intrare(numai pentru operaii de citire)
Ofstream- declarare stream de ieire(numai pentru operaii de scriere)
Fstream- declarare stream de intrare/iesire(n care se pot realiza att operaii de citire ct i operaii de scriere,
n funcie de modul specificat la deschidere.)
Exemplu:
Ifstream f1; (am declarat un stream de intrare denumit f1)
Ofstream f2;(am declarat un stream de ieire denumit f2)
Fstream f3;(am declarat un stream denumit f3)
Pentru a putea opera intr-un fisier, acesta trebuie deschis. Deschiderea unui fisier se face astfel:
Pentru citire - valorile stocate in fisier vor fi citite in vederea prelucrarii:
ifstream <alias_fisier>("<nume_fisier>");
sau
fstream <alias_fisier>("<nume_fisier>",ios::in);
unde:
alias_fisier - reprezinta numele cu care este recunoscut fisierul in cadrul programului
nume_fisier - reprezinta numele fizic al fisierului pe disc
ifstream - reprezinta streamul de intrare
fstream - reprezinta streamul general - poate fi utilizat atat pentru citirea cat si pentru scrierea din/in fisier
La deschidere este obligatoriu s specificm mosul de deschidere dac fiierul este declarat de tip fstream.
Pentru tipul ifstream se utilizeaz implicit modul ios::in, iar pentru tipul ofstream se utilizeaz implicit
modul ios::out.
Exemplu 1:
ifstream f1;
f1.open(date.in);

Am declarat un stream de intrare denumit f1, apoi l-am deschis cu ajutorul functiei open , asociindu-l
fisierului date.in. Deoarece nu am precizat discul logic pe care se afl acest fiier sau calea ctre directorul n
care se afl pe hard-disc n directorul current. Acelai effect l-am fi obinut prin deschiderea fiierului la
declarare astfel:
ifstream f1(date.in);
Exemplul 2:
ofstream f2;
f2.open(c:\\ema\exemple\\date.out);
Am declarat un stream de ieire, denumt f2, pe care l-am asociat fiierului fizic date.out, care se afl pe
discul c:, n directorul exemple, care este un subdirector al directorului ema. n acest exxemplu nu am
specificat nici un mod de deschidere.in acest caz se utilizeaza modul de deschidere implicit(se creeeaza un
fisier vid cu numele specificat , in care se vor realiza doar operatii de scriere).
Exemplul 3:
Fstream f3;
F3.open(nr.in, ios::in);
Am declarat un stream denumit f3 , pe care la deschidere l-am asociat fi;ierului nr.in. Deoarece tipul fstream
nu are asociat un mod de deschidere implicit a fost necesar sa precizam modul de deschidere> ios::in ceea ce
inseamna ca fisierull a fost deschis ca fisier de intrare(numai pentru operatii de citire)
Exemplul 4:
Fstream f4;
F4.open(nr.out,ios::out);
Se creeaza un fi;ier vid cu numele specificat, in care se vor realize doar operatii de scriere.
Exemplul 5:
fstream f5;
f4.open(nr.ad,ios::app);
Modul de deschidere specificat ios::app, nseamn c deschidem fiierul ca fiier de ieire, pentru adugare
de informaie la sfrit.(app=append=sfirsit)
Citirea datelor dintr-un fiier
Dup deschiderea fiierului ca fiier de intrare se pot realiza operaii de citire. n acest scop se poate utiliza
funcia-membru >> sau pot fi utilizate functii specifice.
Una din particularitatile citirii cu operatorul >> este faptul ca ignora caracterele albe. Prin urmare , daca
intentionam sa citim toate caracterele din fisier(inclusiv spaiu, tab, enter) acest mod de citire este inadecvat.
n acest scop putem utiliza funcia putem utiliza funcia get(). De este eemplu , pentru citirea caracterelor se
poate utiliza astfel:
ifstream f1(text.in);
char c;
f1.get(c); //am citit primul caracter din fisier.

Scrierea datelor ntr-un fiier:


Dupa deschiderea fiierului ca fiier de ieire , se pot realiza operaii de scriere utiliznd operatorul de scriere
<<.
Exemplu:
ofstream fout(date.out);
fout<<Salut;
Detectarea sfirsitului de fisier
La deschiderea unui fiier se creeaz un pointer de fiier , care indic poziia curent n stream. Orice
operaie de citire determin deplasarea pointerului de citire n stream-ul de intrare, respective orice operaie
de scriere determin deplasarea pointerului in stream-ul de ie;ire.
Pentru a testa dac pointerul de fiier a ajuns la sfritul fiierului putem utiliza funcia eof(). Funcia
returneaz valoarea 0 dac nu am ajuns la sfritul fiierului , respectiv o valoare diferit de 0 dac am ajuns
la sfrit.
Eemplu:
Scriei o secven de cod careva numara toate caracterele existente intr-un fisier pina la sfirsitul acestuia.
Ifstream fin(text.in);
Char c; long int nr=0;
While (!fin.eof()) {fin.get(c);nr++;}
Cout<<fisierul contine<<nr<<caractere\n;
Testarea reuitei unei operaii de intrare/ieire
Pentru a testa reuita unei operaii de intrare/ieire se poate de utilizat funcia good(). Funcia good
returneaz o valoare deferit de 0 dac operaia precedent de intrare/ieire s-a efectuat cu succes i 0 n caz
contrar.
Exist i alte funcii de test asemntoare: bad() sau fail().
Anticiparea urmtorului caracter la intrare
n anumite situaii este necesar citirea unor date pn a ntlnirea unui anumit caracter cu excepia acestuia.
Pentru a afla anticipat ce caracter urmeaz n stram-ul de intrare putem utiliza funcia membr peek() care
returneaz urmtorul caracter din stream.
nchiderea unui fiier
Dup realizarea tuturor operaiilor cu un fiier, acesta trebuie nchis. nchiderea unui fiier se face cu ajutorul
funcie close().
Exemplu:
f1.close();
Operaia de nchidere este obligatorie , n special pentru fiierele de ieire.
Problem:
S se calculeze suma a dou numere care se citesc din fiierul a.txt. Rezultatul obinut s se nscrie n fiierul
b.txt.

S-ar putea să vă placă și