CATEGORII DOCUMENTE |
Operatiile care pot fi realizate asupra fisierelor sunt: deschiderea unui fisier, scrierea intr-un fisier, citirea dintr-un fisier, pozitionarea intr-un fisier, inchiderea unui fisier.
Functia fopen
Creaza un flux de date intre fisierul specificat prin numele extern (nume_fisier) si programul C. Parametrul mod specifica sensul fluxului de date si modul de interpretare a acestora. Functia returneaza un pointer spre tipul FILE, iar in caz de eroare - pointerul NULL (prototip in stdio.h).
FILE *fopen(const char *nume_fisier, const char *mod);
Parametrul mod este o constanta sir de caractere, care poate contine caracterele cu semnificatiile:
r: flux de date de intrare; deschidere pentru citire;
w: flux de date de iesire; deschidere pentru scriere (creaza un fisier nou sau suprascrie continutul anterior al fisierului existent);
a: flux de date de iesire cu scriere la sfarsitul fisierului, adaugare, sau crearea fisierului in cazul in care acesta nu exista;
: extinde un flux de intrare sau iesire la unul de intrare/iesire; operatii de scriere si citire asupra unui fisier deschis in conditiile r, w sau a.
b: date binare;
t: date text (modul implicit).
Exemple:
'r+' - deschidere pentru modificare (citire si scriere);
'w+' - deschidere pentru modificare (citire si scriere);
'rb' - citire binara;
'wb' - scriere binara;
'r+b' - citire/scriere binara.
Functia freopen (stdio.h)
FILE *freopen(const char*nume_fis,const char*mod,FILE *flux_date);
Asociaza un nou fisier unui flux de date deja existent, inchizand legatura cu vechiul fisier si incercand sa deschida una noua, cu fisierul specificat. Functia returneaza pointerul catre fluxul de date specificat, sau NULL in caz de esec (prototip in stdio.h).
Functia open
int open(const char *nume_fisier, int acces [,int mod]);
Deschide fisierul specificat conform cu restrictiile de acces precizate in apel. Returneaza un intreg care este un indicator de fisier sau -1 (in caz de esec) (prototip in io.h).
Restrictiile de acces se precizeaza prin aplicarea operatorului | (disjunctie logica la nivel de bit) intre anumite constante simbolice, definite in fcntl.h, cum sunt :
O_RDONLY - citire;
O_WRONLY - scriere
O_RDWR - citire si scriere
O_CREAT - creare
O_APPEND - adaugare la sfarsitul fisierului
O_TEXT - interpretare CR-LF
O_BINARY - nici o interpretare.,
Restrictiile de mod de creare se realizeaza cu ajutorul constantelor:
S_IREAD - permisiune de citire din fisier
S_IWRITE - permisiune de scriere din fisier, eventual legate prin operatorul "|".
Functia creat
int creat(const char *nume_fisier, int un_mod);
Creaza un fisier nou sau il suprascrie in cazul in care deja exista. Returneaza indicatorul de fisier sau -1 (in caz de esec). Parametrul un_mod este obtinut in mod analog celui de la functia de deschidere (prototip in io.h).
Functia creatnew
int creatnew(const char *nume_fisier, int mod);
Creaza un fisier nou, conform modului specificat. Returneaza indicatorul fisierului nou creat sau rezultat de eroare (-1), daca fisierul deja exista (prototip in io.h).
Dupa cum se observa, informatia furnizata pentru deschiderea unui fisier este aceeasi in ambele abordari, diferenta constand in tipul de date al entitatii asociate fisierului. Implementarea din io.h ofera un alt tip de control la nivelul comunicarii cu echipamentele periferice (furnizat de functia ioctrl), asupra caruia nu vom insista, deoarece desfasurarea acestui tip de control este mai greoaie, dar mai profunda.
Functia fclose
int fclose(FILE *pf);
Functia inchide un fisier deschis cu fopen si elibereaza memoria alocata (zona tampon si structura FILE). Returneaza valoarea 0 la inchiderea cu succes a fisierului si -1 in caz de eroare (prototip in stdio.h).
Functia fcloseall
int fcloseall(void);
Inchide toate fluxururile de date si returneaza numarul fluxurilor de date inchise (prototip in stdio.h).
Functia close
int close(int indicator);
Inchide un indicator de fisier si returneaza 0 (in caz de succes) sau -1 in caz de eroare (prototip in io.h).
Fisierele pot fi scrise si citite caracter cu caracter folosind functiile putc (pentru scriere) si getc (citire).
Functia putc
int putc (int c, FILE *pf);
c - este codul ASCII al caracterului care se scrie in fisier;
pf - este pointerul spre tipul FILE a carui valoare a fost returnata de functia fopen.
Functia putc returneaza valoarea lui c (valoarea scrisa in caz de succes), sau -1 (EOF) in caz de eroare sau sfarsit de fisier.
Functia getc
int getc (FILE *pf);
Functia citeste un caracter dintr-un fisier (pointerul spre tipul FILE transmis ca argument) si returneaza caracterul citit sau EOF la sfarsit de fisier sau eroare.
Sa se scrie un program care creaza un fisier text in care se vor scrie caracterele introduse de la tastatura (citite din fisierul standard de intrare), pana la intalnirea caracterului ^Z = Ctrl+Z.
#include <stdio.h>
#include <process.h>
void main()
while((c=getchar())!=EOF) // sau: while ((c=getc(stdin)) != EOF)
putc(c,pfcar); // scrierea caracterului in fisier
fclose(pfcar); // inchiderea fisierului
Sa se scrie un program care citeste un fisier text, caracter cu caracter, si afiseaza continutul acestuia.
#include <stdio.h>
#include <process.h>
void main()
while((c=getc(pfcar))!=EOF) //citire din fisier, la nivel de caracter
putc(c,stdout);
//scrierea caracterului citit in fisierul standard de iesire (afisare pe monitor)
fclose(pfcar);
Functiile putw si getw (putword si getword) sunt echivalente cu functiile putc si getc, cu diferenta ca unitatea transferata nu este un singur octet (caracter), ci un cuvant (un int).
int getw(FILE *pf);
int putw (int w, FILE *pf);
Se recomanda utilizarea functiei feof pentru a testa intalnirea sfarsitului de fisier.
int tab[100];
FILE *pf;
deschidere fisier
while (!feof(pf))
printf('Sfarsit de fisiern');
#include <stdio.h>
#include <process.h>
void main()
while((c=getchar())!=EOF) // sau: while ((c=getc(stdin)) != EOF)
putc(c,pfcar); // scrierea caracterului Śn fisier
fclose(pfcar); // Śnchiderea fisierului
Intr-un fisier text, liniile sunt considerate ca linii de text separate de sfarsitul de linie ('n'), iar in memorie, ele devin siruri de caractere terminate de caracterul nul ('0'). Citirea unei linii de text dintr-un fisier se realizeaza cu ajutorul functiei fgets, iar scrierea intr-un fisier - cu ajutorul functiei fputs.
Functia fgets este indentica cu functia gets, cu deosebirea ca functia gets citeste din fisierul standard de intrare (stdin). Functia fputs este indentica cu functia puts, cu deosebirea functia puts scrie in fisierul standard de iesire (stdout).
Functia fputs
int fputs(const char *s, FILE *pf);
Functia scrie un sir de caractere intr-un fisier si primeste ca argumente pointerul spre zona de memorie (buffer-ul) care contine sirul de caractere (s) si pointerul spre structura FILE. Functia returneaza ultimul caracter scris, in caz de succes, sau -1 in caz de eroare.
Functia fgets
char *fgets(char *s, int dim, FILE *pf);
Functia citeste maximum dim-1 octeti (caractere) din fisier, sau pana la intalnirea sfarsitului de linie. Pointerul spre zona in care se face citirea caracterelor este s. Terminatorul null ('0') este plasat automat la sfarsitul sirului (buffer-lui de memorie). Functia returneaza un pointer catre buffer-ul in care este memorat sirul de caractere, in caz de succes, sau pointerul NULL in cazul esecului.
Sa se scrie un program care creaza un fisier text in care se vor scrie sirurile de caractere introduse de la tastatura.
#include <stdio.h>
void main()
fclose(pfsir);
Sa se scrie un program care citeste un fisier text, linie cu linie, si afiseaza continutul acestuia
#include <stdio.h>
void main()
fclose(pfsir);}
Sa se scrie un program care creeaza un fisier text "tabel":
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#define PI 3.1415926
void main()
fclose(pfsir);
Scrieti un program care sa faca o copie (caracter cu caracter) a unui fisier text dat.
//Patrut 5/113
#include <stdio.h>
void main(void)
if ((out = fopen(dest, 'wt')) == NULL)
// se copiaza caracterele din 'in' in 'out'
while (!feof(in))
fputc(fgetc(in),out);
fclose(in); fclose(out);
Sa se scrie un program care creaza un fisier binar in care se vor introduce numere reale, nenule.
#include <iostream.h>
#include <stdio.h>
int main()
cout<<'nIntroduceti numere(diferite de 0) terminate cu un 0:'<<'n';
cin>>nr;
while(nr!=0)
fclose(f);
return 0;
Sa se scrie un program ce citeste dintr-un fisier binar numere reale, nenule.
#include <iostream.h>
#include <stdio.h>
int main()
cout<<'nNumerele nenule citite din fisier sunt:'<<'n';
while((fread(&buf, sizeof(buf), 1, f))==1)
// functia sizeof(buf) care returneaza numarul de octeti necesari variabilei buf.
cout<<buf<<' ';
fclose(f);
cout<<'n';
return 0;
Pe langa mecanismul de pozitionare implicit (asigurat prin operatiile de citire si scriere) se pot folosi si operatiile de pozitionare explicita.
Functia fseek
int fseek(FILE *pf, long deplasament, int referinta);
Functia deplaseaza capul de citire/scriere al discului, in vederea prelucrarii inregistrarilor fisierului intr-o ordine oarecare. Functia seteaza pozitia curenta in fluxul de date la n octeti fata de referinta):
deplasament - defineste numarul de octeti peste care se va deplasa capul discului;
referinta - poate avea una din valorile:
0 - inceputul fisierului (SEEK_SET);
1 - pozitia curenta a capului (SEEK_CUR);
2 - sfarsitul fisierului (SEEK_END).
Functia returneaza valoarea zero la pozitionarea corecta si o valoare diferita de zero in caz de eroare (prototip in stdio.h).
Functia lseek
int lseek(int indicator, long n, int referinta);
Seteaza pozitia curenta de citire/scriere in fisier la n octeti fata de referinta. Returneaza valoarea 0 in caz de succes si diferita de zero in caz de eroare (prototip in io.h).
Functia fgetpos
int fgetpos(FILE *flux_date, fpos_t *pozitie);
Determina pozitia curenta (pointer catre o structura, fpos_t, care descrie aceasta pozitie in fluxul de date). Inscrie valoarea indicatorului in variabila indicata de pozitie. Returneaza 0 la determinarea cu succes a acestei pozitii sau valoare diferita de zero in caz de esec. Structura care descrie pozitia poate fi transmisa ca argument functiei fsetpos (prototip in stdio.h).
Functia fsetpos
int fsetpos(FILE *flux_date, const fpos_t *pozitie);
Seteaza pozitia curenta in fluxul de date (atribuie indicatorului valoarea variabilei indicate pozitie), la o valoare obtinuta printr apelul functiei fgetpos. Returneaza valoarea 0 in caz de succes, sau diferita de 0 in caz de esec (prototip in stdio.h).
Exista functii pentru modificarea valorii indicatorului de pozitie si de determinare a pozitiei curente a acestuia.
Functia ftell
long ftell(FILE *pf);
Indica pozitia curenta a capului de citire in fisier. Functia returneaza o valoare de tip long int care reprezinta pozitia curenta in fluxul de date (deplasamentul in octeti a pozitiei capului fata de inceputul fisierului) sau -1L in caz de eroare (prototip in stdio.h).
Functia tell
long tell(int indicator);
Returneaza pozitia curenta a capului de citire/scriere in fisier (exprimata in numar de octeti fata de inceputul fisierului), sau -1L in caz de eroare (prototip in io.h).
Functia rewind
void rewind(FILE *flux_date);
Pozitioneaza indicatorul la inceputul fluxului de date specificat ca argument (prototip in stdio.h).
Functii de testare a sfarsitului de fisier
Functia feof
int feof(FILE *flux_date);
Returneaza o valoare diferita de zero in cazul intalnirii sfarsitului de fisier sau 0 in celelalte cazuri (prototip in stdio.h).
Functia eof
int eof(int indicator);
Returneaza valoarea 1 daca pozitia curenta este sfarsitul de fisier, 0 daca indicatorul este pozitionat in alta parte, sau -1 in caz de eroare (prototip in io.h).
Functii de golire a fluxurilor de date
Functia fflush
int fflush(FILE *flux_date);
Goleste un fluxul de date specificat ca argument. Returneaza 0 in caz de succes si -1 (EOF) in caz de eroare (prototip in stdio.h).
Functia flushall
int flushall(void);
Goleste toate fluxurile de date existente, pentru cele de scriere efectuand si scrierea in fisiere. Returneaza numarul de fluxuri asupra carora s-a efectuat operatia (prototip in stdio.h).
Functii care permit operatii ale sistemului de operare asupra fisierelor
Functia remove
int remove(const char *nume_fisier);
Sterge un fisier. Returneaza valoarea 0 pentru operatie reusita si -1 pentru operatie esuata (prototip in stdio.h).
Functia rename
int rename(const char *nume_vechi, const char *nume_nou);
Redenumeste un fisier. Returneaza 0 pentru operatie reusita si -1 in cazul esecului (prototip in stdio.h).
Functia unlink
int unlink(const char *nume_fisier);
Sterge un fisier. Returneaza 0 la operatie reusita si -1 la esec; daca fisierul are permisiune read-only, functia nu va reusi operatia (prototip in io.h, stdio.h).
Functii care permit manipularea aceluiasi fisier prin doua indicatoare de fisier independente
Functia dup
int dup(int indicator);
Duplica un indicator de fisier. Returneaza noul indicator de fisier pentru operatie reusita sau -1 in cazul esecului (prototip in io.h).
Functia dup2
int dup2(int indicator_vechi, int indicator_nou);
Duplica un indicator de fisier la valoarea unui indicator de fisier deja existent. Returneaza 0 in caz de succes si -1 in caz de esec (prototip in io.h).
Functii pentru aflarea sau modificarea dimensiunii in octeti a fisierelor
Functia chsize
int chsize(int indicator, long lungime);
Modifica dimensiunea unui fisier, conform argumentului lungime. Returneaza 0 pentru operatie reusita sau -1 in caz de esec (prototip in stdio.h).
Functia filelength
long filelength(int indicator);
Returneaza lungimea unui fisier (in octeti) sau -1 in caz de eroare (prototip in io.h).
Functii de lucru cu fisiere temporare care ofera facilitati de lucru cu fisiere temporare prin generarea de nume unice de fisier in zona de lucru.
Functia tmpfile
FILE *tmpfile(void);
Deschide un fisier temporar, ca flux de date, in mod binar (w+b). Returneaza pointerul catre fisierul deschis in cazul operatiei reusite, sau NULL in caz de esec (prototip in stdio.h).
Functia tmpnam
char *tmpnam(char *sptr);
Creaza un nume unic pentru fisierul temporar (prototip in stdio.h).
Functia creattemp
int creattemp(char *cale, int attrib);
Creeaza un fisier unic ca nume, cu atributele specificate in argumentul attrib (prin _fmode,O_TEXT sau O_BINARY), in directorul dat in argumentul cale. Returneaza indicatorul (handler-ul) catre fisierul creat sau -1 (si setarea errno) in cazul esecului (prototip in io.h).
Sa se creeze un fisier binar, care va contine informatiile despre angajatii unei intreprinderi: nume, marca, salariu. Sa se afiseze apoi continutul fisierului.
#include<iostream.h>
#include <stdio.h>
#include <ctype.h>
typedef struct
angajat;
union
buffer;
int main()
do
while(toupper(cont)!='N');
fclose(pf);
//citirea informatiilor
if ((pf= fopen(nume_fis, 'rb')) == NULL)
for(;;)
fclose(pf);
Aplicatia va avea un meniu principal si va permite gestiunea urmatoarelor informatii: codul materialului (va fi chiar 'numarul de ordine'), denumirea acestuia, unitatea de masura, pretul unitar, cantitatea contractata si cea receptionata (vectori cu 4 elemente). Memorarea datelor se va face intr-un fisier de date (un fisier binar cu structuri), numit 'material.dat'. Aplicatia contine urmatoarele functii:
help() - informare privind optiunile programului
Functii pentru fisierele binare, care sa suplineasca lipsa functiilor standard pentru organizarea directa a fisierelor binare:
citireb() - citire in acces direct din fisier;
scrieb() - scriere in acces direct in fisier;
citmat() - citirea de la terminal a informatiilor despre un material;
afismat() - afisarea informatiilor despre un material (apelata de list);
lungfisis() - determinarea lungimii fisierului existent;
crefis() - creare fisier.
Functii pentru adaugarea, modificarea, stergerea si listarea de materiale.
#include <process.h>
#include <iostream.h>
#include <stdio.h>
#include <ctype.h>
typedef struct material
;
material mat;
FILE *pf;
void crefis(),adaug(),modif(),sterg(),list(),help();
void main()
}while(toupper(optiune)!='E');
}
void help() // afisare informatii despre utilizarea meniului si optiunile acestuia
long int lungfis(FILE *f) // returneaza lungimea fisierului
void scrieb(int nr,void *a,FILE *f) //scriere in fisierul binar
}
void citireb(int nr,void *a,FILE *f) //citire din fisierul binar
}
void afismat(material *a) //afisarea informatiilor despre un anumit material
else cout<<'Acest articol a fost sters !'<<'n';
}
void citmat(material *a) //citirea informatiilor despre un anumit material
cout<<'Introduceti cantitatile receptionate : '<<'n';
for(i=0;i<4;i++)
}
void crefis() //deschidere fisier
void adaug() //adaugare de noi materiale
while(mat.codm);
fclose(pf);
}
void modif() //modificarea informatiilor despre un material existent
while(ch!='D' && ch!='N');
if(ch=='D')
}
}while(na);
fclose(pf);
}
void sterg() //stergerea din fisier a unui material
while(!(n>=0 && n<=na));
if(n) scrieb(n,&mat,pf);
}while(n);
fclose(pf);
}
void list() //afisare informatii despre un anumit material
}while(na);
fclose(pf);
}
Scrieti un program de tiparire a continuturilor mai multor fisiere, ale caror nume se transmit ca parametri catre functia main. Tiparirea se face pe ecran (lungimea paginii = 22) sau la imprimanta (lungimea paginii = 61). Continutul fiecarui fisier va incepe pe o pagina noua, cu un titlu care indica numele fisierului. Pentru fiecare fisier, paginile vor fi numerotate (cu ajutorul unui contor de pagini).
Scrieti un program care citeste un fisier text. Pornind de la continutul acestuia, se va crea un alt fisier, prin inlocuirea spatiilor consecutive cu unul singur. Se vor afisa pe ecran continutul fisierului de la care s-a pornit si continutul fisierului obtinut.
Sa se consulte continutul unui fisier si sa se afiseze urmatoarele informatii statistice: numarul de cuvinte din fisier, numarul de caractere, numarul de linii, numarul de date numerice (nu cifre, numere!).
Scrieti un program care sa compare continutul a doua fisiere, si afisati primele linii care difera si pozitia caracterelor diferite in aceste linii.
Scrieti un program care citeste continutul unui fisier sursa scris in limbajul C si afiseaza in ordine alfabetica fiecare grup al numelor de variabile care au primele n caractere identice (n este citit de la tastatura).
Scrieti un program care consulta un fisier text si afiseaza o lista a tuturor cuvintelor din fisier. Pentru fiecare cuvant se vor afisa si numerele liniilor in care apare cuvantul.
Scrieti un program care citeste un text introdus de la tastatura si afiseaza cuvintele distincte, in ordinea crescatoare a frecventei lor de aparitie. La afisare, fiecare cuvant va fi precedat de numarul de aparitii.
Scrieti un program care citeste un text introdus de la tastatura, ordoneaza alfabetic liniile acestuia si le afiseaza.
Scrieti o aplicatie pentru gestiunea informatiilor despre cartile existente intr-o biblioteca. Aplicatia va avea un meniu principal care va permite:
Memorarea datelor intr-un fisier (un fisier binar cu structuri), al carui nume se introduce de la tastatura. Fisierul va contine informatiile: nume carte, autor, editura, anul aparitiei, pret. Pentru fiecare carte, se va genera o cota (un numar unic care sa constituie cheia de cautare).
Adaugarea de noi carti;
Afisarea informatiilor despre o anumita carte;
Cautarea titlurilor dupa un anumit autor;
Modificarea informatiilor existente;
Lista alfabetica a tuturor autorilor;
Stergerea unei carti din biblioteca;
Ordonarea descrescatoare dupa anul aparitiei;
Numele celei mai vechi carti din biblioteca;
Numele celei mai scumpe carti din biblioteca;
Numele autorului cu cele mai multe carti;
Valoarea totala a cartilor din biblioteca.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 2019
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved