Fișiere text: Definiție și operații specifice în C++
Introducere
Fișierele text sunt o parte esențială a programării în C++. Ele permit stocarea și recuperarea datelor sub formă de caractere, oferind o modalitate convenabilă de a organiza și partaja informații.
Definiție
Un fișier text este o colecție de caractere organizate pe linii. Fiecare linie se termină cu un caracter special numit newline (\n). Fișierele text pot conține orice tip de caracter, inclusiv litere, cifre, simboluri și spații albe.
Operații specifice
C++ oferă o serie de operații specifice pentru manipularea fișierelor text.
Deschiderea unui fișier
Pentru a utiliza un fișier text, este necesar să îl deschideți mai întâi. Acest lucru se poate face folosind clasele ifstream (pentru citire) sau ofstream (pentru scriere) din biblioteca fstream.
C++
// Deschiderea unui fișier pentru citire
ifstream fin("fisier.in");
// Deschiderea unui fișier pentru scriere
ofstream fout("fisier.out");
Citirea din fișier
După deschiderea fișierului, se pot citi caractere individuale, linii întregi sau blocuri de date.
C++
// Citirea unui caracter
char c = fin.get();
// Citirea unei linii
string linie;
getline(fin, linie);
// Citirea unui bloc de date
char buffer[1024];
fin.read(buffer, 1024);
#include <iostream>
#include <fstream>
int main() {
std::ifstream fin("exemplu.txt"); // Deschiderea fișierului "exemplu.txt" pentru citire
char c = fin.get(); // Citirea unui caracter
std::cout << "Primul caracter: " << c << std::endl;
std::string linie;
getline(fin, linie); // Citirea unei linii
std::cout << "Prima linie: " << linie << std::endl;
char buffer[1024];
int n = fin.read(buffer, 1024); // Citirea unui bloc de date
std::cout << "Numărul de octeți citiți: " << n << std::endl;
fin.close(); // Închiderea fișierului
return 0;
}
Acest exemplu de cod citește un caracter, o linie de text și un bloc de date binar din fișierul “exemplu.txt”. Conținutul citit este afișat pe consolă.
Programul realizează următoarele operații:
1. Citirea unui caracter:
char c = fin.get();citește un singur caracter din fișierul asociat cu obiectulfinși îl stochează în variabilac.
2. Citirea unei linii:
string linie; getline(fin, linie);citește o linie de text din fișier și o stochează în variabilalinie. Funcțiagetline()se oprește la primul caracter de sfârșit de linie (\n) sau la sfârșitul fișierului.
3. Citirea unui bloc de date:
char buffer[1024]; fin.read(buffer, 1024);citește până la 1024 de octeți din fișier și îi stochează în bufferulbuffer. Numărul real de octeți citiți este stocat în variabilan, care poate fi utilizată pentru a verifica dacă s-a atins sfârșitul fișierului.
Detalii suplimentare:
fineste un obiect de tipifstream, care este o clasă C++ utilizată pentru citirea din fișiere.get()șiread()sunt metode ale claseiifstreamutilizate pentru a citi date din fișier.getline()este o funcție din biblioteca iostream utilizată pentru a citi o linie de text din fișier.- Bufferul este o zonă de memorie care stochează datele citite din fișier.
- Dimensiunea bufferului este de 1024 de octeți, ceea ce înseamnă că programul poate citi până la 1024 de octeți de date la o singură apelare a metodei
read().
Scrierea în fișier
Se pot scrie caractere individuale, linii întregi sau blocuri de date.
C++
#include <iostream>
#include <fstream>
int main() {
std::ofstream fout("exemplu.txt"); // Deschiderea fișierului "exemplu.txt" pentru scriere
fout.put('a'); // Scrierea caracterului 'a'
fout << "Acesta este un exemplu de linie" ; // Scrierea unei linii de text
// fout<<endl;
char buffer[1024] = {0}; // Declararea unui buffer de 1024 de octeți
// Umplerea bufferului cu date (de exemplu, numere, caractere)
fout.write(buffer, 1024); // Scrierea bufferului în fișier
fout.close(); // Închiderea fișierului
return 0;
}
Programul realizează următoarele operații:
1. Scrierea unui caracter:
fout.put('c');scrie caracterul ‘c’ în fișierul asociat cu obiectulfout.
2. Scrierea unei linii:
fout << "Acesta este un exemplu de linie" << endl;scrie textul “Acesta este un exemplu de linie” în fișier, urmat de caracterul de sfârșit de linie (endl).
3. Scrierea unui bloc de date:
fout.write(buffer, 1024);scrie 1024 de octeți din bufferulbufferîn fișier. Conținutul exact al bufferului nu este specificat în cod, dar ar putea conține orice tip de date, cum ar fi numere, caractere sau chiar alte blocuri de date.
Pe scurt, programul scrie un caracter, o linie de text și un bloc de date binar în fișierul asociat cu obiectul fout.
Detalii suplimentare:
fouteste un obiect de tipofstream, care este o clasă C++ utilizată pentru scrierea în fișiere.put()șiwrite()sunt metode ale claseiofstreamutilizate pentru a scrie date în fișier.endleste un manipulator de flux care inserează un caracter de sfârșit de linie în fluxul de ieșire.- Bufferul este o zonă de memorie care stochează datele care urmează să fie scrise în fișier.
- Dimensiunea bufferului este de 1024 de octeți, ceea ce înseamnă că programul poate scrie până la 1024 de octeți de date la o singură apelare a metodei
write().
Închiderea fișierului
După finalizarea operațiunilor cu fișierul, este important să îl închideți pentru a elibera resursele sistemului.
C++
fin.close();
fout.close();
Exemple
Următoarele exemple demonstrează operațiile de bază cu fișiere text:
Exemplul 1: Citirea unui fișier text
C++
#include <iostream>
#include <fstream>
int main() {
// Deschiderea fișierului pentru citire
ifstream fin("fisier.in");
// Citirea fiecărei linii din fișier și afișarea pe ecran
string linie;
while (getline(fin, linie)) {
cout << linie << endl;
}
// Închiderea fișierului
fin.close();
return 0;
}
Exemplul 2: Scrierea unui fișier text
C++
#include <iostream>
#include <fstream>
int main() {
// Deschiderea fișierului pentru scriere
ofstream fout("fisier.out");
// Scrierea mai multor linii în fișier
fout << "Acesta este un exemplu de fișier text" << endl;
fout << "Acesta este al doilea rând" << endl;
// Închiderea fișierului
fout.close();
return 0;
}
Operații avansate
Pe lângă operațiile de bază prezentate anterior, C++ oferă funcții suplimentare pentru manipularea fișierelor text:
- Verificarea existenței unui fișier: Puteți folosi funcția
existsdin biblioteca<filesystem>pentru a verifica dacă un fișier există înainte de a încerca să îl deschideți. - Poziționarea cursorului: Puteți folosi funcțiile
seekgșiseekppentru a plasa cursorul de citire/scriere la o anumită poziție din fișier. - Copierea fișierelor: Biblioteca
fstreamoferă funcțiacopypentru copierea conținutului unui fișier în altul. - Renumarea fișierelor: Funcția
renamedin biblioteca<filesystem>permite redenumirea fișierelor. - Ștergerea fișierelor: Funcția
removedin biblioteca<filesystem>permite ștergerea fișierelor.
Erori și gestionarea excepțiilor
Este important să gestionați corect erorile care pot apărea în timpul lucrului cu fișiere text. Puteți verifica starea de eroare a obiectelor ifstream și ofstream folosind metoda is_open. De asemenea, este recomandat să utilizați blocuri try-catch pentru a intercepta excepțiile și a trata erorile elegant.