curs 13 - prelucrarea fisierelor

Upload: lungu-madalin

Post on 01-Mar-2016

221 views

Category:

Documents


0 download

DESCRIPTION

Programare - Prelucrarea Fisierelor

TRANSCRIPT

CURS

Sumar

13

Prelucrarea

fiierelor

Ierarhia de clase pentru lucrul cu fiiere Deschiderea fiierelor

nchiderea fiierelor

Intrri si ieiri la nivel de fiier Accesul le datele dintr-un fiier Aplicaii

n practic, programele lucreaz cu un volum mare de date. Stocarea datelor se

face pe diverse suporturi magnetice (hard - disc, dischet) sub form de fiiere.

Se numete fiier o colecie de date omogene (adic de acelai tip), stocate pe suport extern i accesat printr-un nume care reprezint numele fiierului.

n C, un fiier poate fi orice, de la un fiier pe disc i pn la un terminal sau o imprimant. Un flux se poate socia unui anumit fiier executnd o operaie de deschidere. Odat ce fiierul a fost deschis, poate avea loc transferul de informaii ntre acest fiier i programul realizat.

Se lucreaz cu dou tipuri de fiiere, i anume: text i binare. Fiierele text sunt fiierele n care datele sunt memorate sub forma unei succesiuni de caractere. Fiecare caracter este memorat prin utilizarea codului ASCII pentru acel caracter.

Fiierele binare sunt fiiere organizate ca date binare (octeii nu sunt considerai ca fiind coduri de caractere). Acestea pot fi prelucrate folosind funciile fread i fwrite. n acest caz se consider c nregistrarea este o colecie de articole. Articolul este o dat de un tip oarecare (predefinit sau definit de utilizator). La o citire, se transfer ntr-o zon special, numit zon tampon (buffer), un numr de articole care se

1 presupune c au o lungime fix. n mod analog, la scriere se transfer din yona tampon un numr de articole de lungime fix.

Ierarhia de clase pentru lucrul cu fiiere

Pentru a putea efectua operaii cu fiiere programele create trebuie s includ fiierul de antet fstream.h.

streambufios

filebuffstreambaseistreamostream

iostream

ifstreamfstreamofstream

La prelucrarea fiierelor se folosesc obiecte ale clasei filebuf care este o clas derivat a clasei streambuf. Obiectele clasei filebuf sunt utilizate de clase specifice pentru operaii cu fiiere i care aparin ierarhiei care are ca rdcin clasa ios.

Clasa fstreambase este o clas de baz pentru urmtoarele 3 clase:

ifstream- folosit la operaii de intrare (citire);

ofstream- folosit la operaii de ieire (scriere);

fstream- folosit la operaii de intrare/ieire (citire/scriere).

Aceste 3 clase, au fiecare, nc o clas de baz i anume:

ifstream- deriv din clasa istream;

ofstream- deriv din clasa ostream;

fstream- deriv din clasa iostream.

2 De aici rezult c pentru obiectele acestor clase se pot aplica funciile membru ale claselor lor de baz, inclusiv suprancrcarea operatorilor se inserare i tergere.

Deschiderea unui fiier

Prelucrarea unui fiier de pe disc ncepe cu deschiderea lui. n acest fel se poate proceda n unul din urmtoarele moduri:

-se utilizeaz funcia membru open cu un obiect al uneia din clasele ifstream,

ofstream sau fstream instaniat fr parametri.

-Se utilizeaz parametri pentru deschiderea fiierului la instanierea obiectelor. n primul caz, obiectele se instaniaz folosind constructori implicii. Fie, de exemplu, instanierea:

ifstream obiect;

Obiectului obiect i se ataeaz un fiier concret la apelul funciei open de forma: obiect.open()

Funcia open este definit n clasa fstreambase i este suprancrcat n clasele derivate din aceasta. Ea are prototipul:

void open(char *fisier, int mod, int protectie)

Parametrul fiier este un pointer spre un ir de caractere care definete numele i extensia fiierului care se deschide, precum i calea spre fiierul respectiv, dac acesta nu se afl n directorul curent.

Parametrul mod definete modul de deschidere al fiierului. n acest scop se pot folosii enumeratorii definii n clasa ios astefel:

in:- fiierul se deschide n intrare (citire);

out:- fiierul se deschide n ieire (scriere);

ate:- dup deschiderea fiierului, poziia curent n fiier este sfritul

3

fiierului; acest mod se folosete pentru a face cutri n fiier ncepnd

cu

sfritul acestuia;

app:- deschidere pentru a aduga nregistrri la sfritul fiierului;

trunc:- dac fiierul exist, coninutul lui se pierde i se creeaz un fiier nou;

el este incompatibil cu opiunile ate i app;

nocreate:- fiierul care se deschide cu aceast opiune trebuie s existe; el nu se

deschide n creare;

noreplace: - dac fiierul exist i este prezent opiunea out, atunci deschiderea este

admis numai dac se utilizeaz opiunea ate sau app;

binary: - fiierul se deschide pentru a fi prelucrat binar; n mod implicit se

consider c fiierele sunt prelucrate pe caractere (n mod text).

La o deschidere de fiier se pot folosi mpreuna mai multe opiuni, folosind operatorul | (sau logic pe bii).

Pentru obiectele clasei ifstream, opiunea in este implicit, iar pentru cele ale clasei ofstream, opiunea out este implicit.

Parametrul protecie definete modul de acces la fiier. n mod implicit acest parametru are valoarea zero, i aceasta nseamn c fiierul respectiv nu are restricii la acces.

Rezultatul operaiei de deschidere de fiier poate fi testat cu ajutorul cuvntului de stare al streamului pentru care s-a apelat funcia open.

Exemple:

1.ifstream fisier;

//se deschide fiierul fis.dat in citire fisier.open(fis.dat,ios::nocreate);

4

//se testeaza starea obiectului fisier dupa deschidere if(fisier)

{//deschidere corecta

}

else {

cout