Prelucrarea fisierelor se poate efectua la doua nivele:
à Nivelul inferior - face apel direct la sistemul de operare;
à Nivelul superior - utilizeaza proceduri speciale pentru operatii de intrare/iesire.
Prelucrarile la acest nivel permit urmatoarele cinci operatii:
int open ( const char cale int acces ) ;
unde:
à cale - este specificatorul de fisier,
à acces - poate fi o combinatie (utilizand operatorul '|') a urmatoarelor valori: O_RDONLY (fisier deschis numai pentru citire), O_WRONLY sau O_CREAT (numai pentru scriere - creare), O_RDWR (citire/scriere), O_APPEND (deschis pentru adaugare la sfarsit), O_BINARY (pentru prelucrare binara O_TEXT (pentru fisier de tip text).
Daca deschiderea fisierului s-a realizat corect, atunci functia returneaza o valoare intreaga reprezentand descriptorul de fisier LUN, care va fi utilizat in continuare la celelelte operatii efectuate asupra acestui fisier), iar in caz de nereusita se va returna valoarea -1.
Pentru a putea utiliza functia Open trebuie incluse fisierele header io.h si fcntl.h.
Exemplu:
int Lun;
Lun = open ("Fisier.Dat",ORDONLY);
Pentru crearea unui fisier se va apela functia Creat:
int creat ( const char cale int mod ) ;
unde:
à mod - poate lua una dintre valorile: S_IREAD (fisierul se poate citi), S_IWRITE (scriere in fisier), S_IEXEC (executia programului din fisierul specificat).
Pentru a putea utiliza functia Creat trebuie incluse fisierele io.h si stat.h.
Fisierele text sunt implicite.
int read ( int Lun void buffer, unsigned lung ) ;
unde:
à Lun - este descriptorul definit la deschidere (0=STDIN STDOUT STDERR STDPRN STDAUX
à buffer - este zona de memorie in care se citeste,
à lung - este lungimea (in octeti) a inregistrarii citite.
Functia returneaza numarul de octeti cititi (cel mult lung), 0 la sfarsit, sau -1 in caz de eroare. Automat, dupa o citire (a articolului curent) se trece la urmatorul articol, implicit prima pozitionare fiind la inceput de fisier (acces secvential).
Pentru a utiliza functiile Read, Write, LSeek sau Close trebuie inclus fisierul io.h.
int write ( int Lun void buffer, unsigned lung ) ;
Functia returneaza numarul de octeti scrisi in fisier, reprezentand lungimea articolului = lung, sau -1 in caz de eroare.
Aceasta functie permite accesul aleator printr-un apel de forma:
long lseek ( int Lun long deplasament, int origine ) ;
unde:
à deplasament - reprezinta numarul de octeti peste care se deplaseaza capul de citire/scriere,
à origine - reprezinta punctul din care se masoara deplasament-ul (0=inceputul fisierului, 1=pozitia curenta, 2=sfarsitul fisierului).
Functia returneaza pozitia curenta fata de inceputul fisierului, sau -1 la eroare.
int close ( int Lun
Functia returneaza 0 la o inchidere corecta, sau -1 la eroare.
int unlink (const char cale
Functia returneaza 0 la o stergere corecta sau -1 la eroare.
Exemple:
// Creare
#include <io.h>
#include <fcntl.h>
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
void main (void)
else cout << ' Open Incorect ! ';
close(Lun);
getchar();
// Citire
#include <io.h>
#include <fcntl.h>
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
void main (void)
else cout << ' Open Incorect ! ';
close(Lun);
getchar();
La acest nivel sunt posibile urmatoarele operatii:
FILE fopen ( const char cale const char mod
unde:
à mod - poate fi "r" pentru deschidere in citire, "w" pentru scriere, "a" pentru adaugare, "r " pentru modificare (citire/scriere), "rb" pentru citire binara, "wb" pentru scriere binara, sau "r+b" pentru citire/scriere binara.
Daca la deschiderea fisierului s-a ales modul "w" sau "a", fisierul va fi creat (recreat).
Functia returneaza un pointer spre tipul FILE definit in fisierul stdio.h, iar in caz de nereusita se va returna valoarea NULL (stdin, stdout, stderr, stdaux si stdprn sunt pointeri spre tipul FILE permitand transferuri fara a fi necesara deschiderea sau inchiderea lor).
Exemplu:
FILE Pf;
Pf = fopen ("Fisier.Dat","w");
int putc ( int c, FILE Pf
unde:
à c - este codul caracterului scris,
à Pf - este valoarea returnata la deschidere sau stdin, stdout, stderr, stdaux, stdprn
Functia returneaza valoarea lui c sau -1 la eroare.
int getc FILE Pf
Functia returneaza codul caracterului citit, sau valoarea EOF la sfarsitul fisierului, sau -1 la eroare.
Exemplu:
#include <stdio.h>
void main (void)
int fclose FILE Pf
Functia returneaza 0 la inchiderea corecta a fisierului sau 1 la eroare.
int fscanf FILE Pf , control, lista_variabile) ;
Parametrii control si lista_variabile au aceeasi semnificatie ca si pentru functia scanf.
Functia returneaza numarul de campuri citite sau EOF
int fprintf FILE Pf , control, lista_expresii) ;
Functia returneaza numarul de caractere scrise in fisier sau -1 la eroare.
Ex.1:
Creare fisier text cu Nume, Prenume
#include <stdio.h>
#include <conio.h>
int Citit(char *x, char*y)
void main (void)
Ex.2:
// Creare fisier text cu format (articole : (Den, Cant, Pret)
#include <stdio.h>
#include <conio.h>
void main (void)
}
while (!Eof); fclose (Produse); }
else printf (' Open incorect'); getchar();
// Listare fisier text
#include <stdio.h>
#include <conio.h>
void main (void)
fclose (Produse); }
else printf (' Fisier Absent'); getchar();
char fgets ( char s, int n, FILE Pf
unde:
à s - zona receptoare (tablou de tip char de dimensiune £ n, terminat cu NUL
à n - numar maxim de caractere (n-1),
Functia returneaza adresa sirului s, sau la EOF returneaza NULL
int fputs ( char s FILE Pf
Functia returneaza codul ultimului caracter scris sau -1 la eroare.
Urmatorul program inlocuieste cuvintele din fisierul F_Niv_S.Cpp aflate in partea stanga a dictionarului Dictio.Txt cu cele corespunzatoare din partea dreapta, rezultatul fiind depus in fisierul F_Niv_S.Pas, asa cum se poate vedea in schema de mai jos.
|
Traduce Fisier text - String
#include <stdio.h> #include <conio.h>
#include <iostream.h> #include <process.h>
#include <string.h>
int Length(char* s)
int Pos(char* s, char* S)
if (Ok) return i; } return -1;
int Pos(char* s, char* S)
void Delete(char* s, int p, int n)
void Delete(char* s, int p, int n)
void Insert(char* s, char *S, int p)
void Insert(char* s, char *S, int p)
void Subst (char* x, char* y, char* S)
void main (void)
Per Dictio[20]; int NrCuv=1;
FILE *Dic; Dic=fopen('Dictio.Txt','r');
if (Dic==NULL)
while (EOF!=fscanf(Dic,'%s%s',Dictio[NrCuv].St,Dictio[NrCuv].Dr))
cout << NrCuv << ' : ' << Dictio[NrCuv ].St
<< ' -> ' << Dictio[NrCuv++].Dr << endl;
fclose(Dic); NrCuv--; getche();
FILE *FisI, *FisE;
FisI=fopen('F_Niv_S.Cpp','r'); FisE=fopen('F_Niv_S.Pas','w');
if (FisI==NULL)
const Dm=100; char
while (fgets(
fclose(FisI); fclose(FisE); getche();
int fseek FILE Pf, long deplasamnet, int origine
unde deplasamnet si origine au aceeasi semnificatie ca si la functia lseek.
Functia fseek returneaza 0 la pozitionare corecta sau o valoare ¹0 la eroare.
long ftell FILE Pf )
Functia ftell returneaza pozitia curenta (fata de inceputul fisierului, in octeti).
Acest tip de prelucrare permite transferul mai multor articole aflate intr-o zona tampon astfel:
unsigned fread (void Pzt, unsigned dim, unsigned nrart, FILE Pf
unde:
à Pzt - este adresa zonei tampon,
à dim - reprezinta lungimea unui articol,
à nrart - reprezinta numarul de articole care se transfera (citesc),
unsigned fwrite (const void Pzt, unsigned dim, unsigned nrart, FILE Pf
Ambele functii returneaza numarul de articole transferate sau -1 la eroare.
Exemple:
#include <stdio.h>
typedef struct Articol;
void main (void)
fclose (Pf); getchar();
fclose (Pf);
|