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