Documente Academic
Documente Profesional
Documente Cultură
Operarea cu fisier
1. se definete o variabil de tip FILE * pentru accesarea
fiierului;
2. se deschide fiierul pentru un anumit mod de acces, folosind
funcia de biblioteca fopen, care realizeaz i asocierea ntre
variabila fiier i numele extern al fiierului
3. se prelucreaz fiierul - citire/scriere cu funciile specifice
4. se nchide fiierul folosind funcia de biblioteca fclose
Accesul la fisiere.
Tipuri de fiiere n C
Fiiere text
conin o succesiune de linii, separate prin
NewLine
fiecare linie are 0 sau mai multe caractere
Fisiere text
Caracter terminator de linie:
fiierele Unix/Linux:
un singur caracter terminator de linie \n
fiierele Windows i MS-DOS:
caracterele \r i \n (CR, LF) ca terminator de linie
Un fiier text poate fi terminat printr-un caracter
terminator de fiier (Ctrl-Z = EOF = -1)
Sfritul unui fiier disc poate fi detectat i pe baza
lungimii fiierului (numr de octei), memorat pe disc.
Se realizeaz conversia automat din/n format extern
(ir de caractere) n/din format intern (binar virgul fix
sau virgul mobil)
Exemple
deschidem fis. inp.txt pentru citire
FILE *f; // declaram un pointer la fisier
f= fopen(inp.txt , r);
Pentru excluderea posibilei greseli putem utiliza:
if ( f = fopen(inp.txt , r ) != NULL )
{ //prelucrarea fisierului }
void main()
{ FILE *fp;
char s[80];
if ( (fp=fopen("c:\\test.c , "r")) == NULL )
{ printf ( "Nu se poate deschide fiierul!\n );
exit (1);}
while ( fgets(s, 80, fp) != NULL )
printf ( "%s", s);
fclose (fp);
}
Conversie
Unitate
transferata
caracter
fgetc()
fputc()
linie
fgets()
fputs()
cu
linii
fscanf()
fprintf()
fara
articol
fread()
fwrite()
fara
text
binar
Functii
folosite
void main()
{ FILE *f;
int dig;
if (( f = fopen( "l1.txt , "r )) == NULL)
{ printf("\n"); exit(0); }
fscanf( f, "%d", &dig); fclose(f);
f=fopen( "out_f.txt", "w");
fprintf (f," %d",dig);
fclose(f); }
Poziionarea n fiier
long ftell(FILE *pf);
ntoarce poziia curent n fiier, exprimat prin
numrul de octei fa de nceputul fiierului
Descriptor al fisierului
int fileno (const FILE *stream) ;
"fileno" intoarce numarul- descriptor fisierului.
Pentru "stdin", "stdout", and "stderr" fileno
intoarce 0, 1, and 2 respectiv. Pentru cele
lalte 3-19.
In caz de eroare "fileno" returneaza -1
Tratarea erorilor
int feof(FILE *pf);
ntoarce o valoare diferit de 0, dac s-a
detectat marcajul de sfrit de fiier
int ferror(FILE *pf);
ntoarce o valoare diferit de 0, dac s-a
detectat o eroare n cursul operaiei de intrare /
ieire
void main()
{ FILE *f_inp;
int n_max; int handle;
float val, max, zero=0;
f_inp = fopen ( "float.dat ", "rb" );
if ( !f_inp )
{ puts(" It is impossible to read file !");
exit(1);
}
handle = fileno (f_inp);
//handle obtine valoarea intoarsa de functia fileno()
Exemplu 6. continuare
n_max=0;
fread(&max, sizeof(float) , 1 , f_inp);
for(int i=1; I < filelength (handle); i++)
{ fread(&val, sizeof(float) , 1 , f_inp);
if (val > max)
{ max=val; n_max=i; }
}
fseek( f_inp, n_max * sizeof(float), SEEK_SET);
fwrite(&zero, sizeof(float), 1, f_inp);
fclose(f_inp);
}