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

  1. 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.
  2. Apertura de Fitxers: Els fitxers es poden obrir en diferents modes, com ara lectura, escriptura, afegir contingut, etc.

  3. Lectura i Escriptura: Utilitzarem diverses funcions per llegir i escriure dades en fitxers.

  4. Tancament de Fitxers: És important tancar els fitxers després d'usar-los per alliberar recursos.

Exemples Pràctics

  1. 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;
}

  1. 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;
}

  1. 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;
}

  1. 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

  1. No oblidar tancar els fitxers: Sempre tanca els fitxers després d'usar-los per evitar pèrdua de dades i alliberar recursos.
  2. Comprovar si el fitxer s'ha obert correctament: Abans de llegir o escriure, assegura't que el fitxer s'ha obert correctament.
  3. 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++.

© Copyright 2024. Tots els drets reservats