En aquest tema, aprendrem com gestionar la lectura i escriptura d'arxius en C. La manipulació d'arxius és una habilitat essencial per a qualsevol programador, ja que permet emmagatzemar i recuperar dades de manera persistent.
Conceptes Clau
- Tipus d'Arxius: Arxius de text i arxius binaris.
- Funcions de la Biblioteca Estàndard:
fopen
,fclose
,fread
,fwrite
,fprintf
,fscanf
, etc. - Modes d'Apertura d'Arxius:
r
,w
,a
,rb
,wb
,ab
, etc. - Gestió d'Errors: Com manejar errors durant les operacions d'arxius.
Funcions Bàsiques per a la Gestió d'Arxius
fopen
i fclose
La funció fopen
s'utilitza per obrir un arxiu, i fclose
per tancar-lo.
Modes d'Apertura
Mode | Descripció |
---|---|
r |
Obre un arxiu per lectura. L'arxiu ha d'existir. |
w |
Crea un arxiu buit per escriptura. Si l'arxiu ja existeix, el contingut es perd. |
a |
Obre un arxiu per afegir. Si l'arxiu no existeix, es crea. |
rb |
Obre un arxiu binari per lectura. |
wb |
Crea un arxiu binari buit per escriptura. |
ab |
Obre un arxiu binari per afegir. |
Exemple: Obrir i Tancar un Arxiu
#include <stdio.h> int main() { FILE *file = fopen("example.txt", "r"); if (file == NULL) { perror("Error al obrir l'arxiu"); return 1; } // Operacions amb l'arxiu fclose(file); return 0; }
fprintf
i fscanf
Aquestes funcions s'utilitzen per escriure i llegir dades de text en un arxiu.
int fprintf(FILE *stream, const char *format, ...); int fscanf(FILE *stream, const char *format, ...);
Exemple: Escriure i Llegir un Arxiu de Text
#include <stdio.h> int main() { FILE *file = fopen("example.txt", "w"); if (file == NULL) { perror("Error al obrir l'arxiu"); return 1; } fprintf(file, "Hola, món!\n"); fclose(file); file = fopen("example.txt", "r"); if (file == NULL) { perror("Error al obrir l'arxiu"); return 1; } char buffer[100]; fscanf(file, "%99s", buffer); printf("Contingut de l'arxiu: %s\n", buffer); fclose(file); return 0; }
fread
i fwrite
Aquestes funcions s'utilitzen per llegir i escriure dades binàries.
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
Exemple: Escriure i Llegir un Arxiu Binari
#include <stdio.h> int main() { FILE *file = fopen("example.bin", "wb"); if (file == NULL) { perror("Error al obrir l'arxiu"); return 1; } int data = 12345; fwrite(&data, sizeof(int), 1, file); fclose(file); file = fopen("example.bin", "rb"); if (file == NULL) { perror("Error al obrir l'arxiu"); return 1; } int readData; fread(&readData, sizeof(int), 1, file); printf("Dada llegida: %d\n", readData); fclose(file); return 0; }
Exercicis Pràctics
Exercici 1: Escriure i Llegir un Arxiu de Text
- Escriu un programa que demani a l'usuari que introdueixi una línia de text.
- Desa aquesta línia en un arxiu de text.
- Llegeix el contingut de l'arxiu i mostra'l per pantalla.
Solució
#include <stdio.h> int main() { char input[100]; printf("Introdueix una línia de text: "); fgets(input, sizeof(input), stdin); FILE *file = fopen("user_input.txt", "w"); if (file == NULL) { perror("Error al obrir l'arxiu"); return 1; } fprintf(file, "%s", input); fclose(file); file = fopen("user_input.txt", "r"); if (file == NULL) { perror("Error al obrir l'arxiu"); return 1; } char buffer[100]; fgets(buffer, sizeof(buffer), file); printf("Contingut de l'arxiu: %s\n", buffer); fclose(file); return 0; }
Exercici 2: Escriure i Llegir un Arxiu Binari
- Escriu un programa que demani a l'usuari que introdueixi un nombre enter.
- Desa aquest nombre en un arxiu binari.
- Llegeix el contingut de l'arxiu i mostra'l per pantalla.
Solució
#include <stdio.h> int main() { int input; printf("Introdueix un nombre enter: "); scanf("%d", &input); FILE *file = fopen("user_input.bin", "wb"); if (file == NULL) { perror("Error al obrir l'arxiu"); return 1; } fwrite(&input, sizeof(int), 1, file); fclose(file); file = fopen("user_input.bin", "rb"); if (file == NULL) { perror("Error al obrir l'arxiu"); return 1; } int readData; fread(&readData, sizeof(int), 1, file); printf("Dada llegida: %d\n", readData); fclose(file); return 0; }
Resum
En aquesta secció, hem après com obrir, tancar, llegir i escriure arxius de text i binaris en C. Hem explorat les funcions bàsiques de la biblioteca estàndard i hem practicat amb exemples i exercicis pràctics. La manipulació d'arxius és una habilitat fonamental que ens permet gestionar dades de manera persistent en les nostres aplicacions.
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