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

  1. Tipus d'Arxius: Arxius de text i arxius binaris.
  2. Funcions de la Biblioteca Estàndard: fopen, fclose, fread, fwrite, fprintf, fscanf, etc.
  3. Modes d'Apertura d'Arxius: r, w, a, rb, wb, ab, etc.
  4. 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.

FILE *fopen(const char *filename, const char *mode);
int fclose(FILE *stream);

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

  1. Escriu un programa que demani a l'usuari que introdueixi una línia de text.
  2. Desa aquesta línia en un arxiu de text.
  3. 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

  1. Escriu un programa que demani a l'usuari que introdueixi un nombre enter.
  2. Desa aquest nombre en un arxiu binari.
  3. 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

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