Documente Academic
Documente Profesional
Documente Cultură
Teorie Fis
Teorie Fis
Tehnici de Programare
4. Fiiere
*fiier;
Descriere
Creeaz un fiier text pentru scriere. Dac acesta exist, este suprascris.
rb
wb
Creeaz un fiier binar pentru scriere. Dac acesta exist, este suprascris.
ab
r+
1
PDF created with pdfFactory Pro trial version www.pdffactory.com
Udritoiu tefan
Stoica Spahiu Cosmin
Tehnici de Programare
4. Fiiere
w+
Creeaz un fiier nou pentru citire i scriere. Dac fiierul exist, este
suprascris.
a+
Creeaz un fiier binar pentru citire i scriere. Dac fiierul exist, este
suprascris.
Prin aceasta se verific dac fopen a reuit s deschid fiierul, n caz contrar
returnnd NULL. Pentru a evita eroarea care ar urma s fie generat de program mai departe,
cnd ar ncerca s foloseasc acel fiier nedeschis, se poate apela funcia de terminare
program:
if ((fisier = fopen("fisier.extensie", "rb")) == NULL) {
fprintf(stderr,"fisierul %s nu poate fi deschis","nume.extensie");
exit(1);
}
Dup ce s-a ncheiat lucrul cu fiierul, acesta va trebui nchis, folosind funcia close().
De abia dup aceea va putea fi eventual redeschis pentru un alt scop (de exemplu era deschis
pentru citire, si se dorete redeschiderea lui pentru scriere). Funcia are sintaxa:
fclose (fisier);
Dup apelul aceste funcii, nu se mai pot efectua nici un fel de operaii asupra
fiierului, pn la o nou deschidere.
unde: pre este variabila n care se citete i care poate fi de oricare din tipurile
predefinite sau definite de utilizator din C. Astfel nct nu conteaz c pre este de tipul int,
double sau c este o structur definit de utilizator.
Observm c nu trebuie s specificm noi neaprat dimensiunea, mai ales c este
posibil s nu o tim exact. Ea este returnat de funcia sizeof( ). Fiier reprezint pointerul
ctre fiierul de utilizat, descris mai sus.
2
PDF created with pdfFactory Pro trial version www.pdffactory.com
Udritoiu tefan
Stoica Spahiu Cosmin
Tehnici de Programare
4. Fiiere
Atunci cnd dm comanda fread( ), se va citi din fiier din poziia curent a cursorului
care iniial, atunci cnd se deschide fiierul este chiar la nceput. Dup prima citire, cursorul
se va afla poziionat dup primii sizeof(pret) octei, deci nainte de cea de-a doua nregistrare.
Problema este ce facem atunci cnd dorim s citim nregistrarea a 3, de exemplu.
Am putea de exemplu s apelm de 3 ori funcia fread( ). Acest lucru nu este totui
posibil dac dorim s citim o nregistrare care se afl la sfirtul fiierului.
O alt variant este folosirea funciei seek( ). Ea are sintaxa:
fseek (fisier, pozitie, origine );
Scrierea n fiier
Pentru a putea scrie n fiier acesta trebuie n primul rnd s fie deschis ntr-un mod
care permite scrierea. De asemenea trebuie s avem grij unde scriem, deoarece atunci cnd
apelm funcia de scriere, aceasta va scrie ncepnd cu poziia curent, indiferent dac
suprascrie alte date sau nu.
fwrite(&pret,sizeof(pret),1,fisier);
3
PDF created with pdfFactory Pro trial version www.pdffactory.com
Udritoiu tefan
Stoica Spahiu Cosmin
Tehnici de Programare
4. Fiiere
Stergerea logic nu implic nici o tergere fizic din fiier. De aceea este mult mai
rapid. Ea implic introducerea unui caracter special n nregistrarea scris (respectiv o nou
variabil sters de tip boolean care s aib valoarea true implicit sau false dac am ters
nregistrarea, pentru cazul n care avem structuri) care s ne semnaleze c nregistrarea
respectiv este tears i va trebui ignorat de acum nainte n toate operaiile din fiier.
Exemplu: avem variabila pret care are valoarea 500. Atunci cnd dorim s o
tergem, i vom modifica doar valoarea n fiier din 500 n -500 (am adugat semnul minus).
Prin convenie, am stabilit c nu exist nici un pre negativ. Prin introducerea semnului
minus, am semnalat c nregistrarea respectiv am ters-o i va trebui ignorat pentru
operaiile ulterioare de citire i scriere, dei ea exist n continuare n fiier.
Atenie:
Dac avem urmtoarea secven de nregistrri n fiier: -200 500 600 900 i dorim
s modificm valoarea nregistrrii 500, n 550, va trebui s ne poziionm n fiier dup
primii sizeof(pre) octei (adic nainte de nregistrarea numrul 2) i nu la nceputul
fiierului, cci chiar dac prima nregistrare este tears logic (-200), ea exist n fiier.
void main(void)
{
char fisier[]="banca.dat";
int tasta;
do{
printf("\ni-iesire "
"c-creare fisier "
"a-adaugare cont "
"d-depunere "
"l- listare "
);
4
PDF created with pdfFactory Pro trial version www.pdffactory.com
Udritoiu tefan
Stoica Spahiu Cosmin
Tehnici de Programare
4. Fiiere
while( !_kbhit() );
tasta=getche();
tasta=tolower(tasta);
printf("\n");
switch(tasta)
{
case 'c':
creare(fisier);
break;
case 'a':
adauga(fisier);
break;
case 'd':
depune(fisier);
break;
case 'l':
listare(fisier);
break;
}
}while(tasta!='i');
}
5
PDF created with pdfFactory Pro trial version www.pdffactory.com
Udritoiu tefan
Stoica Spahiu Cosmin
Tehnici de Programare
4. Fiiere
fclose(f);
}
else
printf("eroare\n");
}
Probleme propuse.
1. S se creeze un fiier care s conin datele dintr-un vector citit de la tastatur, iar
apoi s se sorteze datele scrise n fiier (s se sorteze fiierul), dup un cmp oarecare,
folosind quicksort.
6
PDF created with pdfFactory Pro trial version www.pdffactory.com
Udritoiu tefan
Stoica Spahiu Cosmin
Tehnici de Programare
4. Fiiere
2. S se creeze un fiier care s conin datele dintr-un vector citit de la tastatur, iar
apoi s se sorteze datele scrise n fiier (s se sorteze fiierul), dup un cmp oarecare,
folosind sortarea Shell.
3. S se creeze un fiier care s conin datele dintr-un vector citit de la tastatur, iar
apoi s se sorteze datele scrise n fiier (s se sorteze fiierul), dup un cmp oarecare,
folosind sortarea cu fuziuni (MergeSort).
4. S se creeze un fiier care s conin datele dintr-un vector citit de la tastatur, iar
apoi s se sorteze datele scrise n fiier (s se sorteze fiierul), dup un cmp oarecare,
folosind inseria direct.
5. S se creeze un fiier care s conin datele dintr-un vector citit de la tastatur, iar
apoi s se sorteze datele scrise n fiier (s se sorteze fiierul), dup un cmp oarecare
folosind sortarea prin selecia maximului.
6. S se creeze un fiier care s conin datele dintr-un vector citit de la tastatur, iar
apoi s se sorteze datele scrise n fiier (s se sorteze fiierul), dup un cmp oarecare,
folosind sortarea prin selecia minimului.
7. S se creeze un fiier care s conin date despre studeni. Se folosete structur
Student care s conin nume student, prenume student, not, materie. S se sorteze datele
scrise n fiier dup nume student. S se tearg o anumit nregistrare din fiier.
7
PDF created with pdfFactory Pro trial version www.pdffactory.com