Comment vérifier si un fichier existe en C
-
fopen()
Fonction pour vérifier si un fichier existe en C -
Fonction
stat()
pour vérifier si un fichier existe en C -
Fonction
access()
pour 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