En aquest tema, aprendrem com gestionar errors durant les operacions d'arxius en C. La gestió d'errors és una part crucial de la programació robusta, ja que permet que el programa reaccioni adequadament a situacions inesperades, com ara la impossibilitat d'obrir un arxiu o errors de lectura/escriptura.

Conceptes Clau

  1. Funcions de Gestió d'Arxius: Les funcions de la biblioteca estàndard de C per a la gestió d'arxius, com fopen, fclose, fread, fwrite, etc., retornen valors que indiquen si l'operació ha tingut èxit o ha fallat.
  2. errno: Una variable global que emmagatzema el codi d'error de l'última operació fallida.
  3. perror(): Una funció que imprimeix un missatge d'error a la sortida estàndard d'errors.
  4. strerror(): Una funció que retorna una cadena de text que descriu l'error corresponent a un codi d'error.

Exemples Pràctics

Exemple 1: Comprovar si un Arxiu s'Obre Correctament

#include <stdio.h>
#include <errno.h>
#include <string.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        perror("Error opening file");
        return 1;
    }
    // Operacions amb l'arxiu
    fclose(file);
    return 0;
}

Explicació:

  • fopen intenta obrir l'arxiu "example.txt" en mode lectura.
  • Si fopen retorna NULL, significa que l'arxiu no s'ha pogut obrir.
  • perror imprimeix un missatge d'error que inclou una descripció de l'error basat en errno.

Exemple 2: Gestió d'Errors en Lectura d'Arxius

#include <stdio.h>
#include <errno.h>
#include <string.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        perror("Error opening file");
        return 1;
    }

    char buffer[256];
    if (fgets(buffer, sizeof(buffer), file) == NULL) {
        if (feof(file)) {
            printf("End of file reached.\n");
        } else if (ferror(file)) {
            perror("Error reading file");
        }
        fclose(file);
        return 1;
    }

    printf("Read line: %s\n", buffer);
    fclose(file);
    return 0;
}

Explicació:

  • fgets llegeix una línia de l'arxiu.
  • Si fgets retorna NULL, es comprova si s'ha arribat al final de l'arxiu amb feof o si hi ha hagut un error de lectura amb ferror.
  • perror s'utilitza per imprimir un missatge d'error si hi ha hagut un error de lectura.

Exercicis Pràctics

Exercici 1: Comprovar l'Existència d'un Arxiu

Escriu un programa que comprovi si un arxiu especificat per l'usuari existeix. Si l'arxiu no existeix, el programa ha de mostrar un missatge d'error adequat.

Solució:

#include <stdio.h>
#include <errno.h>
#include <string.h>

int main() {
    char filename[256];
    printf("Enter the filename: ");
    scanf("%s", filename);

    FILE *file = fopen(filename, "r");
    if (file == NULL) {
        perror("Error opening file");
        return 1;
    }

    printf("File opened successfully.\n");
    fclose(file);
    return 0;
}

Exercici 2: Escriure en un Arxiu i Gestionar Errors

Escriu un programa que intenti escriure en un arxiu. Si l'operació d'escriptura falla, el programa ha de mostrar un missatge d'error adequat.

Solució:

#include <stdio.h>
#include <errno.h>
#include <string.h>

int main() {
    FILE *file = fopen("output.txt", "w");
    if (file == NULL) {
        perror("Error opening file for writing");
        return 1;
    }

    const char *text = "Hello, World!";
    if (fputs(text, file) == EOF) {
        perror("Error writing to file");
        fclose(file);
        return 1;
    }

    printf("Text written successfully.\n");
    fclose(file);
    return 0;
}

Resum

En aquesta secció, hem après com gestionar errors durant les operacions d'arxius en C. Hem vist com utilitzar funcions com perror i strerror per proporcionar informació detallada sobre els errors. També hem practicat amb exemples i exercicis per reforçar aquests conceptes. La gestió d'errors és essencial per escriure programes robustos i fiables, i és una habilitat clau per a qualsevol programador.

Curs de Programació en C

Mòdul 1: Introducció al C

Mòdul 2: Tipus de Dades i Variables

Mòdul 3: Flux de Control

Mòdul 4: Funcions

Mòdul 5: Arrays i Strings

Mòdul 6: Punteres

Mòdul 7: Estructures i Unions

Mòdul 8: Assignació Dinàmica de Memòria

Mòdul 9: Gestió d'Arxius

Mòdul 10: Temes Avançats

Mòdul 11: Millors Pràctiques i Optimització

Mòdul 12: Projecte i Avaluació Final

© Copyright 2024. Tots els drets reservats