En aquest tema, aprendrem com gestionar la lectura i escriptura de fitxers en C++. La manipulació de fitxers és una habilitat essencial per a qualsevol programador, ja que permet emmagatzemar i recuperar dades de manera persistent.
Conceptes Clau
-
Fluxos de Fitxers: En C++, els fitxers es gestionen mitjançant fluxos (streams). Hi ha tres tipus principals de fluxos:
ifstream: Flux d'entrada per llegir fitxers.ofstream: Flux de sortida per escriure fitxers.fstream: Flux d'entrada/sortida per llegir i escriure fitxers.
-
Apertura de Fitxers: Els fitxers es poden obrir en diferents modes, com ara lectura, escriptura, afegir contingut, etc.
-
Lectura i Escriptura: Utilitzarem diverses funcions per llegir i escriure dades en fitxers.
-
Tancament de Fitxers: És important tancar els fitxers després d'usar-los per alliberar recursos.
Exemples Pràctics
- Obrir i Tancar Fitxers
#include <iostream>
#include <fstream>
int main() {
std::ifstream inputFile("example.txt"); // Obrir fitxer per lectura
if (!inputFile) {
std::cerr << "No es pot obrir el fitxer!" << std::endl;
return 1;
}
std::ofstream outputFile("output.txt"); // Obrir fitxer per escriptura
if (!outputFile) {
std::cerr << "No es pot obrir el fitxer!" << std::endl;
return 1;
}
// Tancar fitxers
inputFile.close();
outputFile.close();
return 0;
}
- Llegir Dades d'un Fitxer
#include <iostream>
#include <fstream>
#include <string>
int main() {
std::ifstream inputFile("example.txt");
if (!inputFile) {
std::cerr << "No es pot obrir el fitxer!" << std::endl;
return 1;
}
std::string line;
while (std::getline(inputFile, line)) {
std::cout << line << std::endl;
}
inputFile.close();
return 0;
}
- Escriure Dades en un Fitxer
#include <iostream>
#include <fstream>
int main() {
std::ofstream outputFile("output.txt");
if (!outputFile) {
std::cerr << "No es pot obrir el fitxer!" << std::endl;
return 1;
}
outputFile << "Hola, món!" << std::endl;
outputFile << "Aquesta és una línia de text." << std::endl;
outputFile.close();
return 0;
}
- Lectura i Escriptura Simultània
#include <iostream>
#include <fstream>
#include <string>
int main() {
std::fstream file("example.txt", std::ios::in | std::ios::out | std::ios::app);
if (!file) {
std::cerr << "No es pot obrir el fitxer!" << std::endl;
return 1;
}
// Escriure al fitxer
file << "Aquesta és una nova línia." << std::endl;
// Tornar al principi del fitxer per llegir
file.seekg(0, std::ios::beg);
// Llegir del fitxer
std::string line;
while (std::getline(file, line)) {
std::cout << line << std::endl;
}
file.close();
return 0;
}Exercicis Pràctics
Exercici 1: Comptar Línies d'un Fitxer
Escriu un programa que llegeixi un fitxer de text i compti el nombre de línies que conté.
Solució
#include <iostream>
#include <fstream>
#include <string>
int main() {
std::ifstream inputFile("example.txt");
if (!inputFile) {
std::cerr << "No es pot obrir el fitxer!" << std::endl;
return 1;
}
int lineCount = 0;
std::string line;
while (std::getline(inputFile, line)) {
lineCount++;
}
std::cout << "Nombre de línies: " << lineCount << std::endl;
inputFile.close();
return 0;
}Exercici 2: Copiar Contingut d'un Fitxer a un Altre
Escriu un programa que copiï el contingut d'un fitxer de text a un altre fitxer.
Solució
#include <iostream>
#include <fstream>
#include <string>
int main() {
std::ifstream inputFile("example.txt");
if (!inputFile) {
std::cerr << "No es pot obrir el fitxer d'entrada!" << std::endl;
return 1;
}
std::ofstream outputFile("copy.txt");
if (!outputFile) {
std::cerr << "No es pot obrir el fitxer de sortida!" << std::endl;
return 1;
}
std::string line;
while (std::getline(inputFile, line)) {
outputFile << line << std::endl;
}
inputFile.close();
outputFile.close();
return 0;
}Errors Comuns i Consells
- No oblidar tancar els fitxers: Sempre tanca els fitxers després d'usar-los per evitar pèrdua de dades i alliberar recursos.
- Comprovar si el fitxer s'ha obert correctament: Abans de llegir o escriure, assegura't que el fitxer s'ha obert correctament.
- Modes d'obertura: Utilitza el mode d'obertura adequat (
std::ios::in,std::ios::out,std::ios::app, etc.) segons el que necessitis fer amb el fitxer.
Resum
En aquesta secció, hem après com gestionar la lectura i escriptura de fitxers en C++ utilitzant fluxos de fitxers (ifstream, ofstream, fstream). Hem vist exemples pràctics de com obrir, llegir, escriure i tancar fitxers, així com exercicis per reforçar els conceptes apresos. Ara estàs preparat per treballar amb fitxers en els teus projectes de C++.
Curs de Programació en C++
Mòdul 1: Introducció al C++
- Introducció al C++
- Configuració de l'Entorn de Desenvolupament
- Sintaxi i Estructura Bàsica
- Variables i Tipus de Dades
- Entrada i Sortida
Mòdul 2: Estructures de Control
Mòdul 3: Funcions
- Introducció a les Funcions
- Paràmetres de Funció i Tipus de Retorn
- Sobrecàrrega de Funcions
- Recursivitat
Mòdul 4: Arrays i Strings
Mòdul 5: Punteres i Referències
- Introducció als Punteres
- Aritmètica de Punteres
- Punteres i Arrays
- Referències
- Assignació Dinàmica de Memòria
Mòdul 6: Programació Orientada a Objectes
- Introducció a la POO
- Classes i Objectes
- Constructors i Destructors
- Herència
- Polimorfisme
- Encapsulació i Abstracció
Mòdul 7: Temes Avançats
- Plantilles
- Gestió d'Excepcions
- Entrada/Sortida de Fitxers
- Biblioteca de Plantilles Estàndard (STL)
- Expressions Lambda
- Multifil
