Lucrul cu fisierele
Scris de tercot
M-am gandit si eu sa fac un mic tutorial in C despre “Operatii ce se pot realiza asupra unui fisier”! Poate il scutesc un pic pe OSHO de ceva treaba. Ok..sa incepem cu simple operatii de citire/scriere pe fisiere. Exista mai multe modalitati de a realiza citirea/scrierea asupra unui fisier.Eu va voi prezenta doar una dintre ele. Metoda utilizata de mine consta in deschiderea unui fisier pentru operatii de scriere/citire,citirea/scrierea pe fisier realizata caracter cu caracter si in cele din urma inchiderea fisierului.
Deschiderea fisierului pentru citire/scriere!
In primul rand pentru a accesa functia de deschidere a unui fisier trebuie sa includeti headerul stdio.h deasupra proiectului.
Functia care o vom folosi pentru a deschide un fisier este fopen si are urmatorul prototip in header:
locatiefisier - contine locatia fisierului pe care doriti sa-l deschideti. Exemplu ar fi “C:inferno.log”
mod_deschidere - reprezinta modalitatea de utilizare a fisierului (ex citire,adaugare,scriere)
Modurile de deschidere sunt:
� a - deschide un fisier pentru operatiuni de adaugare.Daca fisierul nu exista,sistemul il creeaza!
� r - deschide un fisier pentru operatiuni de citire.
� w - creaza un fisier nou si il deschide pentru operatiuni de scriere,daca mai exista un fisier cu acelasi nume,functia suprascrie fisierul
� r+ - deschide un fisier atat pentru operatiuni de scriere cat si pentru citire
� w+ - creaza un fisier nou si il deschide atat pentru operatiuni de scriere cat si pentru citire,daca mai exista un fisier cu acelasi nume,functia suprascrie fisierul
� a+ - deschide un fisier atat pentru operatii de citire cat si pentru operatii de adaugare.Daca fisierul nu exista,sistemul il creaza!
Functia fopen odata apelata,va returna un pointer de tip FILE asa cum specifica headeru stdio.h.
Daca fisierul nu s-a putut deschide,functia va returna valoarea de NULL.
O modalitate de a verifica daca deschiderea unui fisier s-a puttu realiza este cu ajutorul conditiei if.
Exemplu:
{
//Fisierul s-a putut deschide!
}
else
{
//Fisierul NU s-a putut deschide!
}
Cum am spus,
returneaza un pointer de fisier pe care il vom folosi mai tarziu pentru a citi sau scrie pe un fisier!
In cazul exemplului de mai sus..pointerul ce-l returneaza fopen este atribuit lui fisier_deschis pe care il vom declara :
Pentru tutoarilul defata vom lua <locatie_fisier> ca fiind C:YServer.txt sau puteti voi sa dati orice alta locatie de fisier!
Citirea si scrierea pe un fisier!
Acum ca am invatat sa deschide un fisier putem face operatii de I/O pe fisierul deschis!
Functiile ce le vom folosi pentru operatii de I/O sunt fgetc pentru citire si fputc pentru scriere pe fisier!
Prototipul lor in biblioteca stdio.h este urmatorul:
int fputc(int caracter_transmis,FILE *pointer_de_iesire);
Acum sa le implementam in exemplul nostru.Sa zicem ca dorim sa afisam continutul fisieului deschis!
int litera_citita;
if((fisier_deschis=fopen(”C:YServer.txt”,”r”))!=NULL)
{
[b]while((litera_citita=fgetc(fisier_deschis))!=EOF)
cout< <(char)litera_citita;[/b]
}
else
{
//Fisierul NU s-a putut deschide! si atentionam utilizatorul
cout<<"Fisierul nu s-a putut deschide!";
}
Dupa cum vedeti am folosit o structura repetitva while.Practic acest lucru informeaza programul ca el va citi fisierul,litera cu litera,pana va ajunge la finalul lui! Cand va ajunge la finalul fisierului,ciclul while se va termina!
In structura while avem:
Am folosit un cast “(char)” deoarece functia returneaza, dupa cum vedeti, un int si noi nu vrem sa afisam pe ecran cifre ci literele corespeunzatoare int-ului conform tabelului ASCII! (char) <variabila_de_tip_int> vede <variabila_de_tip_int> ca fiind corespondentul ei in ASCII!
Functiile de I/O prezentate de mine sunt de citire/scriere caracter cu caracter desi exista si functii de citire linie cu linie,eu nu le voi prezenta in tutorialul de fata!Practit, functiile create mai sus scriu/citesc un caracter dupa care muta pozitia cursorului la urmatorul caracter.Daca s-a atins sfarsitul fisierului, functia va returna,asa cum am vazut in exemplu o constanta EOF(End Of FIle)
Inchiderea unui fisier!
Dupa ce am realizat operatia de I/O si nu mai avem nevoie ca fisierul sa fie deschis pur si simplu il inchidem cu o functie special creata,tot din biblioteca stdio.h si anume fclose.
Prototipul ei este urmatorul:
fclose returneaza 0 daca fisierul a fost inchis cu succes si o constana EOF(end of file) daca a aparut o eroare).Testatarea o putem face printr-un banal if.
cout< <"A aparut o eroare la inchiderea fisierului!";
Daca nu apelati functia de inchidere a fisierului,nu va faceti griji, programul le va inchide singur la terminarea lui!
Sa implementam asta si in exemplul nostru:
int litera_citita;
if((fisier_deschis=fopen(”C:YServer.txt”,”r”))!=NULL)
{
while((litera_citita=fgetc(fisier_deschis))!=EOF)
cout<
}
else
{
//Fisierul NU s-a putut deschide! si atentionam utilizatorul
cout<<"Fisierul nu s-a putut deschide!";
}
Daca ar fi sa facem un cod complet cu tot cu headere si main ar arata cam asa:
#include<iostream>
#include<stdio>
void main()
{
FILE *fisier_deschis;
int litera_citita;
if((fisier_deschis=fopen(”C:YServer.txt”,”r”))!=NULL)
{
while((litera_citita=fgetc(fisier_deschis))!=EOF)
cout< <(char)litera_citita;
fclose(fisier_deschis);
}
else
{
//Fisierul NU s-a putut deschide! si atentionam utilizatorul
cout< <"Fisierul nu s-a putut deschide!";
}
fgetchar();
}
In acest tutorial ati invatat:
� deschiderea fisierlor pentru operatii de I/O
� realizarea de operatii I/O pe un singur caracter cu avansare de cursor la urmatorul caracter
� inchiderea fisierului
Simplu,nu?
Mai tarziu in acest topic va voi arata cum sa faceti operatii de “suprafata” asupra fisierelor in c(cum ar fi stergere,redenumire,etc) acum is un pic obosit…
Pentru sugetii si comentarii postati aici!
©3Nigma
Categoria: Programare
