Ce face std::fopen
fopen deschide un fișier și returnează un pointer FILE*, sau nullptr dacă nu reușește. Modul este un text: "r" citire, "w" scriere (golește fișierul), "a" adăugare la final; cu "b" la final ("rb", "wb") pentru fișiere binare.
Cu pointerul obținut folosești fprintf, fputs, fgets, fscanf, fread, fwrite. La final, fclose scrie pe disc ce era în buffer și eliberează fișierul.
Spre deosebire de std::ifstream, fișierul nu se închide singur: dacă uiți fclose, datele pot rămâne nescrise. În C++ sunt preferate fluxurile din <fstream>, dar funcțiile C apar des în cod existent și în biblioteci.
Parametri
| Parametru | Descriere |
|---|---|
nume |
Calea fișierului. |
mod |
"r", "w", "a", "r+", "w+", eventual cu "b". |
fisier |
Pentru fclose: pointerul primit de la fopen. |
Ce returnează
fopen: FILE* sau nullptr. fclose: 0 la succes, EOF la eroare.
Exemple
Exemplul 1: Scriere și citire cu funcții C
#include <cstdio>
int main() {
std::FILE* f = std::fopen("produse.txt", "w");
if (!f) {
std::puts("Nu pot crea fișierul");
return 0;
}
std::fprintf(f, "%s %.2f\n", "pâine", 4.5);
std::fprintf(f, "%s %.2f\n", "lapte", 7.99);
std::fclose(f);
f = std::fopen("produse.txt", "r");
char rand[100];
while (std::fgets(rand, sizeof(rand), f)) {
std::printf("> %s", rand);
}
std::fclose(f);
}
Rezultat
> pâine 4.50
> lapte 7.99
Exemplul 2: Fișier inexistent
#include <cstdio>
int main() {
std::FILE* f = std::fopen("lipsa.txt", "r");
if (f == nullptr) {
std::puts("Fișierul nu există sau nu poate fi citit.");
} else {
std::fclose(f);
}
}
Rezultat
Fișierul nu există sau nu poate fi citit.
Greșeli frecvente
- Nu verifici dacă
fopena returnatnullptrși apelezi apoifprintfsaufgetspe el: programul se oprește brusc. - Uiți
fclose: fișierul rămâne deschis, iar o parte din date poate să nu ajungă pe disc. - Deschizi cu
"w"un fișier pe care voiai să-l completezi: conținutul vechi se pierde. Pentru adăugare se folosește"a".
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::printf: Afișează text formatat în stil C, cu marcaje precum %d, %s, %.2f.std::scanf: Citește valori formatate de la tastatură în stil C, primind adresele variabilelor.