Lire un fichier en C

Jinku Hu 12 octobre 2023
  1. Utiliser les fonctions fopen et fread pour lire un fichier texte en C
  2. Utilisez les fonctions fopen et getline pour lire un fichier texte en C
Lire un fichier en C

Cet article présente plusieurs méthodes pour lire un fichier texte en C.

Utiliser les fonctions fopen et fread pour lire un fichier texte en C

Les fonctions fopen et fread font partie des fonctions d’entrée/sortie de la bibliothèque standard C.

fopen est utilisé pour ouvrir un fichier donné sous forme de flux et donner au programme le moyen de le manipuler si nécessaire. Il prend deux paramètres, le nom du fichier en tant que chaîne const char* et le mode dans lequel ouvrir le fichier spécifié avec des valeurs prédéfinies (r, w, a, r+, w+, a+). Lorsque nous avons besoin de lire un fichier, nous passons r comme deuxième paramètre pour ouvrir le fichier en mode lecture seule.

D’autre part, la fonction fread est l’acteur principal dans la conduite de l’opération de lecture à partir d’un flux de fichiers déjà ouvert. Elle prend un pointeur vers la mémoire tampon où les octets lus doivent être stockés comme premier argument. Les deuxième et troisième arguments spécifient le nombre d’éléments à lire à partir du flux et la taille de chacun d’entre eux. Le dernier argument est le pointeur FILE* vers le flux de fichiers ouvert lui-même.

Notez que nous utilisons également la fonction stat pour récupérer la taille du fichier et lire le contenu entier en un seul appel fread. La taille du fichier est également transmise à la fonction malloc pour allouer suffisamment d’espace pour stocker tout le contenu du fichier. Attention cependant, les allocations de mémoire dynamique doivent être libérées par la fonction free et les fichiers ouverts doivent être fermés avec fclose.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>

int main(void) {
  const char* filename = "input.txt";

  FILE* input_file = fopen(filename, "r");
  if (!input_file) exit(EXIT_FAILURE);

  struct stat sb;
  if (stat(filename, &sb) == -1) {
    perror("stat");
    exit(EXIT_FAILURE);
  }

  char* file_contents = malloc(sb.st_size);
  fread(file_contents, sb.st_size, 1, input_file);

  printf("%s\n", file_contents);

  fclose(input_file);
  free(file_contents);

  exit(EXIT_SUCCESS);
}

Utilisez les fonctions fopen et getline pour lire un fichier texte en C

On peut aussi sauter la récupération de la taille du fichier avec la fonction stat et, à la place, répéter l’opération sur chaque ligne du fichier jusqu’à la fin en utilisant la fonction getline. La fonction getline lit la chaîne de caractères entrée dans le flux de fichiers donné. Comme son nom l’indique, la fonction récupère tous les octets jusqu’à ce que le caractère newline soit trouvé.

getline prend trois paramètres, dont le premier stocke les octets lus. Il peut être déclaré comme char* et défini à NULL. En attendant, si le second argument est l’adresse de l’entier 0, le getline alloue automatiquement de la mémoire dynamique pour le tampon, qui devrait être libéré par l’utilisateur, d’où l’appel à la fonction free à la fin du programme.

Notez que ces paramètres peuvent avoir des valeurs différentes si nécessaire, tout cela est expliqué dans cette fonction manuel. Le troisième paramètre est le pointeur FILE* du flux de fichiers ouverts.

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>

int main(void) {
  const char* filename = "input.txt";

  FILE* input_file = fopen(filename, "r");
  if (!input_file) exit(EXIT_FAILURE);

  char* contents = NULL;
  size_t len = 0;
  while (getline(&contents, &len, input_file) != -1) {
    printf("%s", contents);
  }

  fclose(input_file);
  free(contents);

  exit(EXIT_SUCCESS);
}
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Article connexe - C File