Sunteți pe pagina 1din 29

Obiective: -s defineasc noiunea de fiier; -s asimileze funcile de prelucrare a fiierelor; -s aplice funciile studiate la rezolvarea problemelor.

Ceea ce a fost aceea va mai fi, ...:cci nu este nimic nou sub soare. Ecclesiastul 1,9

Completai tabelul
Ce cred c tiu Vreau s tiu Am nvat

Continuai enunul:
Pointerul este... o varibil care pstreaz adresa unui obiect din memoria calculatorului. Funcia reprezint... un asamblu independent de declaraii i instruciuni, destinate pentru rezolvarea unor anumite probleme concrete, care se ntlnesc n program de mai multe ori. Funciile de prelucrare a irurilor de caractere sunt... strcat(); strchr(); strcmp(); strcpy(); strlen(); strstr();

Fiier = colecie ordonat de articole (nregistrri) pstrate pe un suport extern de memorie i identificate printr-un nume. Fiierul standard de intrare cu date introduse de la tastatur. Fiierul standard de ieire -cu rezultate afiate pe terminalul standard de ieire. Fiierul standard de eroare - afiseaza mesajele de eroare.

Un flux text presupune transferul de caractere organizate n linii de caractere. Fluxul binar reprezint o succesiune de octei care nu suport nici o modificare n timpul transferului.

Prelucrarea fiierelor se face pe dou niveluri: nivelul inferior, care apeleaz direct la sistemul de operare. nivelul superior, care utilizeaz structuri speciale FILE Funciile de pe nivelul superior nu asigur o independen total fa de sistemul de operare. Funciile standard de intrare / ieire au prototipurile n fiierul antet <stdio.h>.

Operaiile specifice prelucrrii fiierelor sunt:


deschiderea unui fiier
nchiderea unui fiier creerea unui fiier citirea de articole din fiier (consultarea fiierului) actualizarea (sau modificarea) fiierului adugare de articole la sfritul fiierului poziionarea n fiier. tergerea unui fiier schimbarea numelui unui fiier

Fiierele sunt gestionate prin pointeri la structuri FILE, asociate fiierelor pe durata prelucrrii. Fiierele standard au pointerii predefinii: stdin,stdout, stderr, stdprn, stdaux. Declararea unui pointer la fiier : FILE *pf; Deschiderea unui fiier . asociaz unui nume de fiier un pointer la fiier . stabilete un mod de acces la fiier Pentru deschiderea unui fiier se folosete funcia FILE *fopen(char *nume_fisier, char *mod_acces);

Accesul la fiiere

Moduri uzuale pentru deschiderea fiierelor :

Se deschide pentru creare fiierul fisier1.txt


#include<stdio.h> #include<conio.h> void main() { FILE *f; f=fopen("fisier1.txt","w"); fclose(f); }

Operaia de nchidere a fiierelor


Dup terminarea prelucrrii datelor dintr-un fiier anterior deschis trebuie executat o operaie de nchidere logic a fiierului repectiv. Acest lucru se realizeaz cu funcia freopen() al crui prototip este int fclose(FILE *fp) i se apeleaz asfel fclose(ptrfile); unde : - fp i respectiv ptrfile este pointerul returnat de apelarea funciei fopen() dup o deschidere reuit. Funcia fclose() returneaz o valoare ntreaga zero dac nchiderea a Reuit i o valoare EOF dac pe parcursul operaiei de nchidere intervine o eroare.

Testarea modului n care sa executat deschiderea


#include<stdio.h> #include<conio.h> #include<stdlib.h> void main() { FILE *f; f=fopen("fisier2.txt","w"); if((f=fopen("fisier2.txt","w"))== NULL) { printf("eroare la deschiderea fisierului"); exit(1); } printf("operatia a reusit"); fclose(f ); }

Operaia de scriere
a unui caracter ntr-un fiier int putc(int ch, FILE *fp); int fputc(int ch, FILE *fp); a unui ir de caractere ntr-un fiier int fputs(const char *string, FILE *pf);

Operaia de citire
a unui caracter ntr-un fiier int fgetc(FILE *fp); int getc(FILE *fp); a unui ir de caractere ntr-un fiier char *fgets(char *string, int size_string, FILE *pf);

Operaia de citire a unui bloc de date dintr-un

fiier (fread())
fread(&variabila, sizeof(tip_variabila),nr_rec,ptrfile); unde: - variabila poate fi o variabil de un tip standard al C sau o variabil de un tip structurat definit de utilizator. - tip_variabila este un tip standard de date (char, int, long, float, double i derivatele lor) al C sau un tip structurat definit de utilizator (structur, uniune, etc). - sizeof(tip_variabila) este lungimea, n bytes, a tipului variabilei. - nr_rec este numarul de articole de tipul tip_variabil care urmeaz sa fie citit din fiier. - ptrfile este poinerul la fiierul din care se va citi un bloc de lungime egala cu nr_rec*sizeof(tip_variabila).

Operaia de scriere a unui bloc de date ntr-un fiier (fwrite()) fwrite(&variabila, sizeof(tip_variabila),nr_rec,ptrfile); unde: - variabila poate fi o variabil de un tip standard al C sau o variabila de un tip structurat definit de utilizator. - tip_variabila este un tip standard de date (char, int, long, float, double i derivatele lor) al C sau un tip structurat definit de utilizator (structur, uniune, etc). - sizeof(tip_variabila) este lungimea, n bytes, a tipului variabilei. - nr_rec este numarul de articole de tipul tip_variabila care urmeaza sa fie scris n fiier. - ptrfile este poinerul la fiierul n care se va scrie un bloc de lungime egala cu nr_rec*sizeof(tip_variabila).

Operaia de testare a sfritului de fiier (feof())


naintea prelucrarii datelor din fiierele deschise n citire este necesar verficarea atingerii marcajului de sfrit de fiier (EOF), care se poate efectua prin apelarea i execuia funciei feof() aflat n fiierul stdio.h avnd prototipul: int feof(FILE *fp); i care se apeleaz astfel: feof(ptrfile); unde fp, respectiv ptrfile, este un pointer la funcia omoloag, obinut prin operaia de deschidere reuit cu funcia fopen(). Functia feof() returneaza o valoare zero (false) dac s-a atins sfritul de fiier i o valoare diferita de zero (true) dac nu s-a atins sfritul de fiier.

Operaia de citire cu format dintr-un fiier (fscanf())


apel se face astfel: scanf(ptrfile,format[,&v1][,&v2][,&v3] ); unde: - ptrfile este un pointer la fiierul din care se vor citi date cu format, pointer returnat de funcia fopen() n procesul de deschidere n citire a fiierului specificat. - &v1, &v2, &v3 ... constitue lista adreselor variabilelor sau lista adreselor parametrilor efectivi de apel ai funciei fscanf(), ale caror valori urmeaz s fie citite din fiierul text indicat de pointerul ptrfile. - format este un ir de caractere inclus ntre ghilimele care conine descrierea formatului de intrare sau un pointer la un ir de caractere care coine descrierea formatului de intrare.

Operaia de scriere cu format dintr-un fiier fprintf()


fprintf(ptrfile,format[,e1][,e2][,e3] );

unde: - ptrfile este un pointer la fiierul n care se vor scrie date cu format, pointer returnat de functia fopen() n procesul de deschidere n scriere a fiierului specificat. - e1, e2, e3 ... constitue lista de argumente sau parametrii efectivi de apel ai funciei fprintf ale cror valori urmeaza sa fie scrise n fiierul specificat . - format este un ir de caractere inclus ntre ghilimele care conine descrierea formatului de ieire sau un pointer la un ir de caractere care conine descrierea formatului de iesire.

Exemplu: S se afieze 10 siruri de caractere introduse de la tastatur ntr-un fiier pe disc(fisout) care este redirecionarea fiierului standart de ieie(stdout) asociat ecranului. #include<stdio.h> #include<conio.h> #include<stdlib.h> void main() {char s[50]; int i; if((freopen("fisout","w",stdout))== NULL) { printf("eroare la deschiderea fisierului"); exit(1); } printf("operatia a reusit"); for(i=1;i<10;i++) { printf("\n introdu sirul nr.%d",i); gets(s); printf(s); } }

Exemplu: S se afieze pe ecran, caracter cu caracter, coninutul unui fiier de tip text aflat pe disc n directoriul curent.
#include<stdio.h> #include<conio.h> #include<stdlib.h> void main() {FILE *f; char c; if((f=fopen("fisier2.txt","r"))== NULL) { printf("eroare la deschiderea fisierului"); exit(1); } c=fgetc(f); while(c!=EOF){ putchar(c); c=fgetc(f);} fclose(f); }

Exemplu: Se consider fiierul unu.txt care conine pe o singur linie i separate prin spaii 10 numere ntregi.S se afieze pe ecran suma acestor numere.

#include<stdio.h> #include<conio.h> #include<stdlib.h> void main() {FILE *f; int x; long s=0; if((f=fopen("unu.txt","r"))== NULL) { printf("eroare la deschiderea fisierului"); exit(1); } int i; for(i=1;i<=10;i++){ fscanf(f,"%d",&x); s=s+x; } fclose(f); printf(" %d",s); }

Fiiere i structuri

Pentru a nscri o variabil de tip structur n fiier este folosit funcia fwrite() fwrite(&struct_var,struct_size,n,fp); &struct_var numele variabilei de tip structur cu operatorul de adres, care comunic compilatorului adresa celulei de start din memoria unde este amplasat structura; struct_size este mrimea structurii; n este un numr ntreg, care determin cantitatea de structuri ce vor fi nscrise dintr-o ncercare. fp este numele indicatorului la fiier.

Exemplu:
Este creat un masiv de structuri cu informaia despre un grup de studeni ce conine numele studentului, anulnaterii i balul mediu. Mai nti de toate masivul de structuri se completeaz cu informaie, apoi structurile, cte una cu ajutorul ciclului for i funciei fwrite() sunt nscrise n fiier. Numele fiierului este numit de utilizator i pstrat n variabila filename de tip ir de caractere.

#include<stdio.h> #include<conio.h> struct stud{ char nume[15]; int an; float med;}; void main() { struct stud x[10]; int i,n; FILE *f; char filename[12]; float m; printf("numarul de studenti\n"); scanf("%d",&n); for(i=0;i<n;i++){ printf("nume\n"); scanf("%s",&x[i].nume); printf("anul nasterii\n"); scanf("%d",&x[i].an);

printf("nota medie\n"); scanf("%f",&m); x[i].med=m;} printf("numele fisierului\n"); scanf("%s",filename); f=fopen(filename,"w"); for(i=0;i<n;i++) fwrite(&x[i],sizeof(x[i]),1,f); fclose(f); getch();}

#include<stdio.h> #include<conio.h> struct stud{ char nume[15];int an; float med;}; main(){ struct stud y[10]; FILE *k; char fn[12]; int i=0; printf("numele fisierului"); scanf("%s",fn); k=fopen(fn,"r"); printf("informatia citita din fisier"); while(fread(&y[i],sizeof(y[i]),1,k)==1){ printf("Numele studentului:%s\n",y[i].nume); printf("anul nasterii:%d\n",y[i].an); printf("Media:%.2f\n",y[i].med); i++;} fclose(k);getch();}

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