Sunteți pe pagina 1din 4

FIȘIERE

Un fișier reprezintă o colecție de date de același tip memorate, de obicei, pe un suport


extern (hard-disk, floppy-disk, CD, etc.) În concluzie, putem spune că un fișier este o structură de
date externă omogenă cu acces direct sau secvențial.
Organizarea datelor în fișier este necesară dacă:
 Volumul datelor prelucrate este foarte mare și depășește capacitatea memoriei
interne disponobile;
 Datele trebuie stocate în vederea unei prelucrări ulterioare în cadrul aceluiași
program sau al altora.
În C++ fișierele sunt de două tipuri:
 Fișiere text – sunt fișiere în care datele sunt caractere și au numai acces
secvențial;
 Fișiere binare – sunt fișiere în care datele sunt structuri de octeți și au acees atât
secvențial cât și direct.

Fișiere text
Componentele unui fișier text sunt caractere structurate pe linii.
Fiecare linie (fără ultima) se termină prin marcajul de sfârșit de linie ‘\n’ (newline), iar fișierul
prin caracterul EOF (acesta are valoarea 1 la sfârșitul fișierului și 0 dacă nu s-a ajuns la sfârșitul
fișierului).
Marcajul de sfârșit de linie se generează la apăsarea tastei Enter, iar marcajul EOF la apăsarea
tastelor Ctrl+Z.
Observație: Tipul fișier text și tipul tablou se aseamănă deoarece toate componentele lor au
același tip (la fișiere text sunt caractere, iar la tablou sunt de un anumit tip) și se deosebesc prin
numărul de componente.

Pașii necesari utilizării fișierelor text


1) Se deschide fișierul
2) Se citesc sau se scriu date în fișier
3) Se închide fișierul.

1. Deschiderea fișierului
Deschiderea unui fișier înseamnă stabilirea unui nume logic pentru fișier și precizarea modului
de utilizare a fișierului: intrare (citire), ieșire (scriere) sau intrare/ieșire (citire/scriere).
Deschiderea unui fișier în C++ se realizează legându-l de un flux de date (stream). Un stream este
o entitate logică ce produce sau primește informație. Pentru fișiere există trei tipuri de stream-
uri:
- De intrare (din clasa ifstream)
- De ieșire (din clasa ofstream)
- De intrare/ieșire (din clasa fstream).
Pentru a putea utiliza fluxurile de date pentru fișiere trebuie să includem biblioteca fstream
astfel: #include <fstream>
Declararea fluxurilor de date pentru fișiere text se realizează astfel:

a) pentru citire:
ifstream id_nume_logic_fisier(”nume_fizic_fișier”);
sau
fstream id_nume_logic_fisier(”nume_fizic_fișier”, ios::in);
unde:
- id_nume_logic_fisier este identificatorul (nume logic) al fișierului. Se utilizează în
program pentru a face referire la fișier;
- nume_fizic_fisier este un șir de caractere ce reprezintă numele fizic al fișierului.
- ios::in este o construcție care specifică modul de deschidere; utilizând constanta in
fișierul este deschis pentru intrare (citire).
Fișierul astfel deschis permite numai operații de citire și valorile citite se pot atribui unor
variabile din program. În cazul în care fișierul fizic nu există, se semnalează eroare.

b) pentru scriere:

oifstream id_nume_logic_fisier(”nume_fizic_fișier”);
sau
fstream id_nume_logic_fisier(”nume_fizic_fișier”, ios::out);
unde:
- id_nume_logic_fisier, nume_fizic_fisier, ios:: au aceeași semnificație ca mai sus.
- out este constantă ce precizează că fișierul este deschis pentru scriere (ieșire).
Obs.
Dacă fișierul fizic nu există este creat.
În cazul în care fișierul fizic există conținutul se pierde și se crează un fișier nou.
Sunt permise numai operații de scriere.

c) pentru adăugare
fstream id_nume_logic_fisier(”nume_fizic_fișier”, ios::app);
unde:
- id_nume_logic_fisier, nume_fizic_fisier, ios:: au aceeași semnificație ca mai sus.
- app precizează că fișierul este deschis pentru adăugare (scriere la sfârșitul fișierului).
Obs.
Dacă fișierul fizic nu există, se semnalează eroare.
În cazul în care fișierul fizic există acesta este deschis și se pot adăuga date la sfârșitul fișierului.
Informația existentă în fișier nu se pierde.
Sunt permise numai operații de scriere.
Se pot combina două sau mai multe dintre constante unindu-le prin ”sau logic” |.
De exemplu, fstream f(“numere.txt”, ios:in|ios::app);
Exemple:
1. ifstream f(”numere.txt”); // sau fstream f(”numere.txt”, ios::in);
- deschide pentru citire fișierul numere.txt cu numele logic f;
2. ofstream g(”suma.txt”); //sau fstream g(”suma.txt”, ios::out);
- deschide pentru scriere fișierul suma.txt cu identificatorul g;
3. fstream x(”produse.txt”, ios::app);
- deschide pentru adăugare fișierul produse.txt cu numele logic x;
4. fstream f(”vector.txt”, ios::in|ios::app);
- deschide fișierul vector.txt cu numele logic f pentru citire sau pentru a adăuga date la sfârșitul
acestuia.

2. Citirea/scrierea datelor
Citirea/scrierea datelor se realizează asemănător cu citirea/scrierea de la tastatură/monitor cu
ajutorul operatorilor >> pentru citire și << pentru scriere în fluxul de date al fișierului astfel:
a) pentru citire: id_nume_logic_fișier>>v1>>v2>>....>>vn;
b) pentru scriere: id_nume_logic_fișier<<e1<<e2<<...<<en;
Unde:
- id_nume_logic_fișier este numele logic al fișierului text;
- v1, v2, ...,vn sunt variabile în care se citesc datele din fișier;
- e1, e2,...,en sunt expresii a căror valoare se scrie în fișier;
Observații
Operația de citire se face fără format, adică sunt ignorate caracterele albe.
Pentru a lua în considerare și caracterele albe se utlizează funcțiile get(ch) sau get().
Funcția get(ch) citește un caracter din fișier și îl depune în variabila ch, iar get() returnează
caracterul citit.
Exemple:
1.
int a, b;
ifstream f(”numere.txt”);
f>>a>>b;
Secvența citește în variabilele a, b două valori întregi separate prin spațiu sau Enter, din fișierul f.
2.
char a; char a;
ifstream (”nume.txt”); sau ifstream f(”nume.txt”);
while(f.get(a)) a=f.get();
cout<<a; while(!f.eof()){
cout<<a;
a=f.get();}

Secvența citește din fișierul f în variabila a caracter cu caracter și se afișează pe ecran.


3.
float a=5, b=3.14;
ofstream g((”numere.out”);
g<<a<<” “<<b<<endl;
g<<”scrie pe randul urmator acest mesaj”<<endl;
Secvența scrie în fișierul g valorile variabilelor a și b cu spațiu între ele iar pe rândul următor se
va afișa mesajul.

3. Închiderea fișierului
Pentru închiderea fișierului se utilizează funcția close() .
Exemplu: f.close(); //închide fișierul cu numele logic f
Alte funcții utilizate în prelucrarea fișierelor
 id_nume_logic_fisier.eof() = returnează o valoare diferită de 0 dacă este sfârșit de fișier
și 0, în caz contrar.
 rename(nume_fis1, nume_fis2); = redenumește fișierul nume_fis1 cu numele specificat
în nume_fis2. Are prototipul în cstdio.
 remove(nume_fis) =sterge fișierul specificat. Are prototipul în cstdio.

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