Ce face std::ofstream
std::ofstream („output file stream”) scrie într-un fișier cu aceleași instrumente ca std::cout: operatorul <<, std::setw, std::fixed etc. Dacă fișierul nu există, este creat.
Implicit, un fișier existent este golit la deschidere. Cu modul std::ios::app („append”), textul nou se adaugă la final. Pentru fișiere binare se adaugă std::ios::binary.
Datele trec printr-un buffer și ajung sigur pe disc la închiderea fluxului: automat, când variabila iese din domeniu, sau explicit cu close().
Exemple
Exemplul 1: Scrierea unui fișier și verificarea lui
#include <fstream>
#include <iostream>
#include <string>
int main() {
{
std::ofstream out("cumparaturi.txt");
out << "pâine\n";
out << "lapte\n";
out << "mere: " << 2 << " kg\n";
}
std::ifstream in("cumparaturi.txt");
std::string rand;
while (std::getline(in, rand)) {
std::cout << "- " << rand << '\n';
}
}
Rezultat
- pâine
- lapte
- mere: 2 kg
Exemplul 2: Suprascriere sau adăugare
A doua deschidere fără app golește fișierul; a treia, cu std::ios::app, adaugă la final.
#include <fstream>
#include <iostream>
#include <sstream>
int main() {
std::ofstream("jurnal.txt") << "luni\n";
std::ofstream("jurnal.txt") << "marți\n"; // suprascrie
std::ofstream("jurnal.txt", std::ios::app) << "miercuri\n"; // adaugă
std::ifstream in("jurnal.txt");
std::ostringstream continut;
continut << in.rdbuf();
std::cout << continut.str();
}
Rezultat
marți
miercuri
Greșeli frecvente
- Deschizi un fișier existent fără
std::ios::appși pierzi tot conținutul vechi. - Nu verifici dacă deschiderea a reușit (de exemplu directorul nu există sau nu ai drept de scriere): scrierile eșuează fără niciun mesaj. Verifică cu
if (!out).
Comenzi înrudite
std::ifstream: Deschide un fișier pentru citire și îl citește la fel ca pe std::cin.std::fstream: Flux de fișier care poate și citi, și scrie în același fișier.std::ifstream::open: Deschide, verifică și închide fișierul unui flux: open, is_open, close.std::istream::read: Citește sau scrie un număr exact de octeți: read și write, pentru fișiere binare.std::fopen: Deschide un fișier în stil C (fopen) și îl închide (fclose); lucrezi cu el prin FILE*.