std::ofstream în C++

Creează sau deschide un fișier pentru scriere și scrie în el la fel ca în std::cout.

Sintaxă
#include <fstream>
std::ofstream fisier("nume.txt");                  // suprascrie
std::ofstream fisier("nume.txt", std::ios::app);   // adaugă la final
fisier << valoare;

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*.