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
openpe un flux care are deja un fișier deschis: operația eșuează. Apelează întâiclose(). - După un
openeșuat, fluxul rămâne în stare de eroare chiar și după unopenreuș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ă).