Precum am mai menționat, un fișier este o colecție de date, iar în programare se lucrează cu două clase mari de fișiere
fișiere text
fișiere binare
Exemple de fișiere text:
fisierIntrare.in
fisierRezultate.out
numere.txt
În C++ există mai multe modalități de lucru cu fișiere text. Toate respectă următoarele etape:
deschiderea fișierului/asocierea fișierelui cu un flux de date;
citirea din fișier/scrierea în fișir;
închiderea fișiereul/fluxului de date
Pentru a putea cu fișiere, trebuie să se adauge o bibliotecă standard numită <fstream>
O modalitate uzuală de a deschide fișiere constă în declararea unor variabile de tip flux. Acestea sunt de tip:
ostream pentru fluxurile de ieșire – asociate cu fișierele în care vom scrie;
istream pentru fluxurile de intrare – asociate cu fișierele din care vom citi;
Declararea variabilelor se poate face astfel:
istream fin(NUME_FISIER_INTRARE); ostream fout(NUME_FISIER_IESIRE);
NUME_FISIER_INTRARE și NUME_FISIER IESIRE sunt șiruri de caractere care conțin numele fișierelor din care se face citirea/în care se face scrierea, de exemplu:
istream fin("fisier.in"); ostream fout("fisier.out");
Slide 4
Citirea din fișier/scrierea în fișier
Pentru citirea propiu-zisă a datelor din fișier/scrierea datelor în fișier se folosesc operatorii de extracție din flux/inserare în flux.
De exemplu:
int x; fin >> x; fout << 2 * x;
Slide 5
Închiderea fișierelor
Se face astfel:
fin.close(); fout.close();
Observații
fișierele de intrare (deschise pentru citire) trebuie să existe. Dacă se deschide pentru citire un fișier care nu există, operațiile de citire (fin >> ...) vor eșua și comportamentul programului devine de multe ori impredictibil;
fișierele de ieșire (deschise pentru scriere) nu trebuie să existe. La deschidere ele vor fi create. Dacă fișierul de ieșire există conținurul său va fi înlocuit cu datele scrise de programul care rulează.
Slide 6
Un exemplu complet
Următorul program este soluție corectă pentru problema #sum :
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("sum.in");
ofstream fout("sum.out");
int main() {
int a , b, s;
fin >> a >> b;
fin.close();
s = a + b;
fout << s;
fout.close();
return 0; }