std::ifstream::open în C++

Deschide, verifică și închide fișierul unui flux: open, is_open, close.

Sintaxă
void open(const std::string& nume, std::ios::openmode mod = std::ios::in);
bool is_open() const;
void close();

Ce face std::ifstream::open

Un flux de fișier poate fi creat gol (std::ifstream f;) și legat de un fișier mai târziu, cu f.open("nume.txt"). is_open() spune dacă fluxul are în acest moment un fișier deschis, iar close() îl închide și trimite pe disc ce era în buffer.

Aceleași trei funcții există la std::ofstream și std::fstream. Un flux închis poate fi redeschis cu alt fișier, ceea ce e util când prelucrezi mai multe fișiere pe rând cu aceeași variabilă.

Parametri

Parametru Descriere
nume Calea fișierului.
mod Opțional: std::ios::in, out, app, binary, trunc, combinate cu |.

Ce returnează

open și close nu returnează nimic; eșecul pune fluxul în stare de eroare. is_open returnează true sau false.

Exemple

Exemplul 1: Deschidere ulterioară și verificare

#include <fstream>
#include <iostream>
#include <string>

int main() {
    std::ofstream out;
    std::cout << std::boolalpha << "Înainte de open: " << out.is_open() << '\n';
    out.open("salut.txt");
    std::cout << "După open: " << out.is_open() << '\n';
    out << "Salut din fișier!\n";
    out.close();
    std::cout << "După close: " << out.is_open() << '\n';

    std::ifstream in;
    in.open("salut.txt");
    std::string text;
    std::getline(in, text);
    std::cout << "Conținut: " << text << '\n';
}

Rezultat

Înainte de open: false
După open: true
După close: false
Conținut: Salut din fișier!

Exemplul 2: Același flux pentru mai multe fișiere

#include <fstream>
#include <iostream>
#include <string>

int main() {
    std::ofstream("ianuarie.txt") << 1200;
    std::ofstream("februarie.txt") << 950;

    std::ifstream in;
    int total = 0;
    for (std::string luna : {"ianuarie", "februarie", "martie"}) {
        in.open(luna + ".txt");
        if (!in.is_open()) {
            std::cout << luna << ": lipsește\n";
            in.clear();
            continue;
        }
        int vanzari;
        in >> vanzari;
        std::cout << luna << ": " << vanzari << " lei\n";
        total += vanzari;
        in.close();
    }
    std::cout << "Total: " << total << " lei\n";
}

Rezultat

ianuarie: 1200 lei
februarie: 950 lei
martie: lipsește
Total: 2150 lei

Greșeli frecvente

  • Apelezi open pe un flux care are deja un fișier deschis: operația eșuează. Apelează întâi close().
  • După un open eșuat, fluxul rămâne în stare de eroare chiar și după un open reușit ulterior, pe compilatoare vechi. Apelează clear() ca să fii sigur.

Comenzi înrudite

  • std::ifstream: Deschide un fișier pentru citire și îl citește la fel ca pe std::cin.
  • std::ofstream: Creează sau deschide un fișier pentru scriere și scrie în el la fel ca în std::cout.
  • std::fstream: Flux de fișier care poate și citi, și scrie în același fișier.
  • std::istream::eof: Verifică starea unui flux: eof (sfârșitul datelor) și fail (citire eșuată).