Sunteți pe pagina 1din 5

Fiiere in C++

Un fier este o colecie de date indicat printr-un nume i o extensie. Numele


este
desparit de extensie prin punct.
Avantajul lucrului cu fisiere este evident, datele rezultate n urma execuiei unui
program putnd fi salvate.
n esen, exist doua tipuri de fsiere: fisiere text si fisiere binare. Un fier text
conine text ci!re si caractere" iar un fsier #inar poate conine si imagini, baze
de date, etc.
Vom studia lucru cu fisere text.
$entru lucrul cu fiere text in C++ se adau% o #i#liotec standard si anume
&!stream.'(. )ceast #i#liotec lucreaz cu *uxuri stream-uri) :
ifstream flux de intrare
ofstream flux de iesire
fstream are ambele caracteristici ifstream si ofstream)
+preaiile care se e!ectueaz, n %eneral, cu fsiere text sunt:
- desc!idrea unui fisier text
- "nc!iderea unui fisier text
- citirea datelor dintr-un fisier text
- scrierea datelor intr-un fisier text
- adu%area datelor ntr-un fier text
$entru o mai #un nele%ere ne propunem s exemplifcm rezol,area
urmtoarei
situaii: Fie fierul text fs.in n care sunt scrise numere pe mai multe rnduri. Se cere:
- citirea datelor din fierul text ntr-un vector si afarea lor
- scrirea datelor citite in fisierul text fis.out;
- adugarea datelor citite anterior in acelai fier fs.out
$entru aceasta ,om parcur%e urmtoarele etape:
#. $%&'(#$%)%A *+*# ,#&#%) -%.-
$entru a putea e!ectua operaii cu un fier text acesta tre#uie mai int-i
desc'is.
Astfel se pot folosi unul din obiectele ifstreampentru citire) sau ofstrempentru
scriere) din/"n fisier.
ifstream f0fis.in0)1 //s-a desc!is fisierul pentru citire &A*
fstream f0fis.in0,ios::in)1 //2i a2a s-a desc!is fisierul pentru citire
ofstream f0fis.in0)1 //s-a desc!is fisierul pentru scriere &A*
fstream f0fis.in0,ios::out)1 //s-a desc!is fisierul pentru scriere
fstream f0fis.in0,ios::app)1 // s-a desc'is fsierul pentru adu%are
##. 3+'(#$%)%A *+*# ,#&#%) -%.-
.e realizeaz cu a/utolul !unciei:
f.close)1
###. '#-#)%A $A-%45) $#+-)-*+ ,#&#%) -%.-
0om !olosi ast!el urmtoarea sec,en de pro%ram:
6include7iostream.!8
6include7fstream.!8
6include7conio.!8
void main)
9
clrscr)1
int v:;<<=,i><,j><,n1
fstream f0fis.in0, ios::in)1 //s-a desc!is fisierul pentru citire
11o alt ,arianta ar f !ost: ifstream f0fis.in0)1
?!ile@f.eof)) // ct timp nu s-a a/uns la s!-ritul fsierului text
9
iAA1
f88v:i=1 //se citeste din fisier caracter cu caracter
jAA1
B
fori>;1i7j1iAA)
cout77v:i=770 01 11 se afeaz fecare element din ,ector
f.close)1 // se "nc!ide fisierul
getc!e)1
B
5bs: 'itirea datelor s-a !cut ntr-un vector, dintr-un fisier text in care se aflau
numere scrire pe mai multe rnduri.
#V. &')#%)%A $A-%45) #+-)-*+ ,#&#%) -%.-
Fisierul n care dorim s scriem textul ,a f suprascrie la fecare execuie a
programului. &ecvena de pro%ram este urmtoarea:
6include7iostream.!8
6include7fstream.!8
6include7conio.!8
void main)
9
clrscr)1
int v:;<<=,i><,j><,n1
fstream f0fis.in0, ios::out)1 //s-a desc!is fisierul pentru scriere
11o alt ,arianta ar f !ost: ofstream g0fis.out0)1
fori>;1i7j1iAA)
g77v:i=1 11 se scrie din ,ector in fier
g.close)1 // se "nc!ide fisierul
getc!e)1
B
V. )23U4)56) 2)768+5 N75-UN F9:965 76;7
.ec,ena de pro%ram este urmtoarea:
6include7iostream.!8
6include7fstream.!8
6include7conio.!8
void main)
9
clrscr)1
int v:;<<=,i><,j><,n1
fstream !0fis.out0,ios::app)1 //s-a desc!is fisierul pentru adaugare
fori>;1i7j1iAA)
!77v:i=1 11 se scrieadau%a" din ,ector in fier
!.close)1 // se "nc!ide fisierul
getc!e)1
B
In CodeBlocks cand creati voi proiectul, pe langa programul main.cpp, trebuie sa adaugati
un fisier pentru datele de intrare. Acest lucru se face astfel: click pe File -> Ne-> !mpt"
file si apoi il denumiti asa cum doriti . Acest nume trebuie scris intre g#ilimele in comanda
de desc#idere de fisier. In fisierul te$t voi trebuie sa scrieti datele de intrare.
%bs. Fisierul cu datele de intrare se poate crea si cu Notepadul apoi il adaugati la proiectul
din CodeBlocks.
Fi&ierele de ie&ire se creea'( singure prin program. )e pute*i vi'uali'a &i +nafara la
CodeBlocks cu Notepad-ul.
,roblema -
&e citesc dintr-un fi2ier text un numCr n scris pe primul rnd, apoi n numere naturale scrise pe
rndurile urmCtoare. Afi2aDi suma celor n numere.
6include 7iostream8
6 include 7fstream8
using namespace std1
int main)
9int n,v:;<<=,i,s><1
ifstream f0date.in0)1
f88n1
fori><1i7n1iAA)
9
f88v:i=1
s>sAv:i=1
B
f.close)1
cout770suma numerelor este 077s1
return <1
B
,roblema .
// &e da un fisier text dateE.in care contine pe prima linie un numar natural n,
// iar pe a doua linie are n numere naturale. &a se citeasca cele n numere apoi scrieti
// in fisierul text de iesire dateE.out toate numerele pare si in fisierul de iesire dateF.out
// toate numerele impare.
// 4a sfarsit desc!ideti fisierele de iesire si afisati pe ecran pe primul rand toate numerele pare
// si pe al doilea rand numerele impare.
6include 7iostream8
6include 7fstream8
int main)
9int n,i,x1
ifstream f0dateE.in0) 1
f88n1
ofstream g0dateE.out0)1
ofstream !0dateF.out0)1
fori><1i7n1iAA)
9 f88x1
ifxGE>><) g77x770 01
else !77x770 01
B
f.close)1
g.close)1 // pentru a salva datele scrise in fisierul de iesire si acesta trebuie inc!is
!.close)1
ifstream H0dateE.out0)1 // se desc!id pentru citire date
ifstream l0dateF.out0)1
H88x1
?!ile@H.eof)) 9 cout77x770 01 H88x1B //$eoarece nu stim cate numere pare contine fisierul g
// folosim ?!ile-ul cu eof care depisteaza cand s-a ajuns la sfarsitul fisierului text
cout77endl1 // pentru a trece pe randul urmator
?!ile@l.eof)) 9l88x1 cout77x770 01B //5I&%)VA-# 'A *4-#J*4 +*JA) &%
$*I4%AKA $A'A/ +* ,545&%&' VA)#A+-A $% 4A +*J%)%4% LA)% @@@
A+A4#KA-# $% '% M@
return <1
B
/em(
;. &e dC un fi2ier text date.in care conDine pe primul rnd un numCr natural n iar pe al doilea rnd
sunt n numere naturale. &C se scrie in fisierul text de iesire pe douC rnduri mesajele:
;. sunt N. numere pare
E. sunt N. numere impare
#n locul punctelor scrieDi numCrul de numere pare 2i numCrul de numere impare
%xemplu: fi2ierul de intrare conDine O
P Q ; EF ;R S EE T SS
fi2ierul de ie2ire va conDine ;. sunt T numere pare
E. sunt S numere impare
E. &e dC un fi2ier date.in cu numere intregi. 5bs. +u se 2tie cte numere sunt) &e cite2te de la
tastaturC un numCr natural x. &C se scrie "ntr-un fi2ier de ie2ire date.out toate numerele divizibile
cu numCrul x.
%xemplu: FP SS T PP SR EQ ;<
;R EF ES TT
x>P
,isierul de ie2ire va conDine pe primul rnd textul : +umere divizibile cu P sunt:
iar pe al doilea rnd : FP PP SR ;R ES