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
- 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. - errno: Una variable global que emmagatzema el codi d'error de l'última operació fallida.
- perror(): Una funció que imprimeix un missatge d'error a la sortida estàndard d'errors.
- 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
retornaNULL
, significa que l'arxiu no s'ha pogut obrir. perror
imprimeix un missatge d'error que inclou una descripció de l'error basat enerrno
.
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
retornaNULL
, es comprova si s'ha arribat al final de l'arxiu ambfeof
o si hi ha hagut un error de lectura ambferror
. 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
- Introducció a la Programació
- Configuració de l'Entorn de Desenvolupament
- Programa Hello World
- Sintaxi i Estructura Bàsiques
Mòdul 2: Tipus de Dades i Variables
Mòdul 3: Flux de Control
Mòdul 4: Funcions
- Introducció a les Funcions
- Arguments de Funció i Valors de Retorn
- Àmbit i Durada de les Variables
- Funcions Recursives
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
- Introducció a la Gestió d'Arxius
- Lectura i Escriptura d'Arxius
- Posicionament d'Arxius
- Gestió d'Errors en Operacions d'Arxius
Mòdul 10: Temes Avançats
- Directives del Preprocessador
- Arguments de Línia de Comandes
- Llistes d'Arguments Variables
- Multifil en C
Mòdul 11: Millors Pràctiques i Optimització
- Llegibilitat del Codi i Documentació
- Tècniques de Depuració
- Optimització del Rendiment
- Consideracions de Seguretat