Comment vérifier si un fichier existe en C

Satishkumar Bharadwaj 12 octobre 2023
  1. fopen() Fonction pour vérifier si un fichier existe en C
  2. Fonction stat() pour vérifier si un fichier existe en C
  3. Fonction access() pour vérifier si un fichier existe en C
Comment vérifier si un fichier existe en C

Ce didacticiel explique comment vérifier si le fichier existe en C. La façon de vérifier si un fichier existe est d’essayer d’ouvrir le fichier en mode lecture ou écriture. Ce programme ouvre un fichier en mode lecture.

fopen() Fonction pour vérifier si un fichier existe en C

#include <stdio.h>
int main(void) {
  FILE *file;

  if (file = fopen("demo.txt", "r")) {
    fclose(file);
    printf("file exists");
  } else {
    printf("file doesn't exist");
  }

  return 0;
}

Le résultat est :

file exists

Ici, le nom du fichier est demo.txt. Le programme C et le fichier demo.txt sont dans le même répertoire. La sortie est donc file exists.

Si l’emplacement du programme C et l’emplacement du fichier sont différents, nous devons spécifier le chemin complet du fichier.

Nous pouvons créer une fonction définie par l’utilisateur et vérifier si le fichier existe ou non. Voici le programme avec une fonction définie par l’utilisateur.

#include <stdio.h>
int checkIfFileExists(const char *filename);
int main(void) {
  if (checkIfFileExists("demo.txt")) {
    printf("file exists");
  } else {
    printf("file does not exists");
  }
}

int checkIfFileExists(const char *filename) {
  FILE *file;
  if (file = fopen(filename, "r")) {
    fclose(file);
    return 1;
  }

  return 0;
}

Le programme affichera file exists si le fichier demo.txt et le programme C ont le même emplacement. Si le programme C et le nom du fichier se trouvent à des endroits différents, nous devons spécifier le chemin complet du fichier.

Fonction stat() pour vérifier si un fichier existe en C

Nous lisons les attributs du fichier en utilisant la fonction stat() au lieu de lire les données d’un fichier. Cette fonction retournera 0 si l’opération est réussie ; sinon, elle retournera -1, si le fichier n’existe pas.

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

int checkIfFileExists(const char* filename);

int main(void) {
  if (checkIfFileExists("demo.txt")) {
    printf("file exists");
  } else {
    printf("file does not exists");
  }
}

int checkIfFileExists(const char* filename) {
  struct stat buffer;
  int exist = stat(filename, &buffer);
  if (exist == 0)
    return 1;
  else
    return 0;
}

Le programme affichera file exists si le fichier demo.txt et le programme C ont le même emplacement. Si le programme C et le nom du fichier se trouvent à des endroits différents, nous devons spécifier le chemin complet du fichier.

Fonction access() pour vérifier si un fichier existe en C

Une autre façon de vérifier si le fichier existe est d’utiliser la fonction access(). Le fichier d’en-tête unistd.h a une fonction access pour vérifier si le fichier existe ou non.

Nous pouvons utiliser R_OK pour les droits de lecture, W_OK pour les droits d’écriture, et X_OK pour les droits d’exécution. Nous pouvons les utiliser ensemble comme R_OK|W_OK pour les droits de lecture et d’écriture.

#include <stdio.h>
#include <unistd.h>
int main(void) {
  if (access("C:\\TEMP\\demo.txt", F_OK) != -1) {
    printf("file is found");
  } else {
    printf("file is not found");
  }
  return 0;
}

Le résultat est :

file is found

Ici, C:\TEMPdemo.txt est l’emplacement du fichier. Si le fichier existe, il affiche file is found ; sinon, il affiche file is not found. L’emplacement du programme et le fichier demo.txt ont le même emplacement. Sinon, nous devons spécifier l’emplacement du fichier. Le combinatino des fonctions stat() et access() est un bon choix pour le système d’exploitation Linux.

Une autre façon d’utiliser la fonction access() est la suivante :

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void checkIfFileExists(const char *fileName);

int main(void) {
  char *fileName = "C:\\TEMP\\demo.txt";

  checkIfFileExists(fileName);
  return 0;
}

void checkIfFileExists(const char *fileName) {
  if (!access(fileName, F_OK)) {
    printf("The File %s was Found\n", fileName);
  } else {
    printf("The File %s not Found\n", fileName);
  }

  if (!access(fileName, R_OK)) {
    printf("The File %s can be read\n", fileName);
  } else {
    printf("The File %s cannot be read\n", fileName);
  }

  if (!access(fileName, W_OK)) {
    printf("The File %s  can be Edited\n", fileName);
  } else {
    printf("The File %s  cannot be Edited\n", fileName);
  }

  if (!access(fileName, X_OK)) {
    printf("The File %s is an Executable\n", fileName);
  } else {
    printf("The File %s is not an Executable\n", fileName);
  }
}

Le résultat est :

The file C :\TEMP\demo.txt was found The file C
    :\TEMP\demo.txt can be read The file C
    :\TEMP\demo.txt can be Edited The file C :\TEMP\demo.txt is an executable

Article connexe - C File