Prelucrarea fisierelor in limbajul C
Prelucrarea fisierelor in limbajul C se face asociind fiecarui fisier un stream. Pentru aceasta se defineste un pointer la o variabila tip FILE cu instructiunea:
FILE* ptrfile;
Un fisier trebuie deschis inainte de prelucrare si trebuie inchis dupa prelucrare. Asocierea unui 555i84f fisier cu un stream se face la deschiderea fisierului cu instructiunea:
ptrfile = fopen(nume_fisier, mod);
unde ptrfile este o variabila de tipul FILE* iar nume_fisier este un sir de caractere cu numele fisierului. Parametrul mod este un sir de caractere ce contine modul de descriere al fisierului, in citire sau in creare. Functia fopen() returneaza un pointer ce nu trebuie modificat. Functia fopen() returneaza un pointer NULL cand operatia de deschidere a fisierului a esuat.
Inchiderea fisierului se face cu instructiunea:
fclose(ptrfile);
Prototipurile tuturor functiilor pentru operatii cu fisiere in limbajul C sunt definite in biblioteca <stdio.h>.
Fisiere text
In cazul fisierelor text, parametrul mod al functiei fopen() este "r" pentru citire si "w" pentru creare. Instructiunile de scriere si citire sunt :
fprintf(ptrfile, format, lista de variabile);
fscanf(ptrfile, format, lista de variabile);
Probleme rezolvate
Problema 1 Sa se creeze un fisier text cu 26 de linii de cate 10 caractere fiecare. Liniile vor contine caracterele 'A', 'B', . , 'Z'. Sa se citeasca fisierul creat la punctul anterior si sa se listeze pe ecran. Se va examina fisierul creat cu un editor. Programul ce rezolva problema este urmatorul.
#include<stdio.h>
int main()
fclose(file);
file = fopen('rez.txt', 'r');
for(i = 0; i < 26; i++)
fclose(file);
return 0;
Rezultatele rularii programului sunt cele de mai jos.
Problema 2. Fie expresia . Sa se calculeze valorile expresiei pentru a=1.25 si x luand valori de la 1 la 2 cu pasul 0.2. Valorile expresiei se vor scrie intr-un fisier sub forma
x e(x)
..
..
.........
2.0 ..
Se va citi apoi fisierul creat si se va afisa pe ecran. Se va examina fisierul creat cu un editor. Programul ce rezolva problema este urmatorul.
#include<stdio.h>
int main()
fclose(file);
file = fopen('rez.txt', 'r');
//la citire apar doua siruri, pentru ca un sir se termina la primul spatiu din intrare
fscanf(file, '%s %s',sir1,sir2);
printf('%s %sn',sir1,sir2);
for(i=0;i<=nr_pasi;i++)
fclose(file);
return 0;
Rezultatele rularii programului sunt cele de mai jos.
Problema 3 . Sa se scrie un program care sa determine dimensiunea in octeti a unui fisier. Aceasta se face citind fisierul si numarand octetii cititi. Citirea secventiala a unui fisier se face cu instructiunea while. Programul ce rezolva problema este urmatorul.
#include <stdio.h>
int main()
fclose(file);
printf('fisierul %s contine %d octetin', name, nb);
return 0;
Rezultatele rularii programului sunt cele de mai jos.
2. Fisiere binare
In cazul fisierelor binare, parametrul mod al functiei fopen() este "rb" pentru citire si "wb" pentru creare.
Instructiunile de scriere si citire sunt
size_t fwrite(void* buffer, size_t size, size_t nbr, FILE* ptrfile);
size_t fread(void* buffer, size_t size, size_t nbr, FILE* ptrfile);
unde:
buffer - zona unde se scriu/de unde se citesc date;
size - dimensiunea blocului de date;
nbr - numarul de blocuri de scris/citit;
prtfile - pointer la structura FILE asociata fisierului.
Instructiunea fread are ca rezultat numarul de blocuri citite si zero in caz de eroare sau la intalnirea sfarsitului de fisier.
Probleme rezolvate
Problema 1. Sa se creeze un fisier binar in care se vor scrie 10 blocuri de cate 15 octeti fiecare. Blocurile vor contine caracterele '0', '1', ., '9'. Ultimul octet din fiecare bloc va avea valoarea 0. In acest fel fiecare bloc este un sir tip C. Sa se citeasca apoi fisierul creat si sa se listeze pe ecran. Programul ce rezolva problema este urmatorul.
#include <stdio.h>
int main()
fclose(fil);
fil = fopen('fil.txt', 'rb');
int xct;
// citeste un sir
xct = fread(x, 15, 1, fil);
while(xct != 0)
fclose(fil);}
Rezultatele rularii programului sunt cele de mai jos.
Probleme propuse
Problema 1. Sa se faca un program care sa copieze un fisier tip text in altul. Aceasta se va face citind cate un octet din primul fisier si scriindu-l in al doilea fisier.
|