Ce face std::fstream
std::fstream combină ifstream și ofstream. Modul de deschidere se dă explicit: std::ios::in (citire), std::ios::out (scriere), std::ios::app (adăugare), std::ios::trunc (golire), std::ios::binary.
Cu in | out, fișierul trebuie să existe deja; altfel deschiderea eșuează. Cu in | out | trunc este creat sau golit. Între scriere și citire trebuie mutată poziția cu seekg sau seekp.
Exemple
Exemplul 1: Scriere, apoi citire din același flux
#include <fstream>
#include <iostream>
#include <string>
int main() {
std::fstream f("stoc.txt", std::ios::in | std::ios::out | std::ios::trunc);
f << "mere 12\npere 5\n";
f.seekg(0); // înapoi la început pentru citire
std::string produs;
int cantitate;
while (f >> produs >> cantitate) {
std::cout << produs << ": " << cantitate << " kg\n";
}
}
Rezultat
mere: 12 kg
pere: 5 kg
Exemplul 2: in | out nu creează fișierul
#include <fstream>
#include <iostream>
int main() {
std::fstream f("inexistent.txt", std::ios::in | std::ios::out);
std::cout << std::boolalpha << "Deschis: " << f.is_open() << '\n';
}
Rezultat
Deschis: false
Greșeli frecvente
- Scrii și apoi citești fără
seekg: poziția este la finalul textului scris, deci nu citești nimic. - Te aștepți ca
std::ios::in | std::ios::outsă creeze fișierul. Nu îl creează; adaugăstd::ios::truncsau creează-l întâi custd::ofstream.
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::istream::seekg: Mută poziția de citire în flux (seekg) și arată poziția curentă (tellg).