Cómo comprobar si un archivo existe en C
-
fopen()
Función para comprobar si un archivo existe en C -
stat()
Función para comprobar si un archivo existe en C -
access()
Función para comprobar si un archivo existe en C
Este tutorial introduce cómo comprobar si el archivo existe en C. La forma de comprobar si un archivo existe es intentar abrirlo en modo de lectura o escritura. Este programa está abriendo un archivo en modo de lectura.
fopen()
Función para comprobar si un archivo 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;
}
La salida es:
file exists
Aquí el nombre del archivo es demo.txt
. El programa C y el archivo demo.txt
están en el mismo directorio. Así que la salida es file exists
.
Si la ubicación del programa C y la del archivo son diferentes, debemos especificar la ruta completa del archivo.
Podemos crear una función definida por el usuario y comprobar si el archivo existe o no. A continuación se muestra el programa con una función definida por el usuario.
#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;
}
El programa imprimirá file exists
si el archivo “demo.txt” y el programa C tienen la misma ubicación. Si el programa C y el nombre del archivo están en diferentes lugares, debemos especificar la ruta completa del archivo.
stat()
Función para comprobar si un archivo existe en C
Leemos los atributos del archivo usando la función stat()
en lugar de leer los datos de un archivo. Esta función devolverá 0
si la operación tiene éxito; de lo contrario, devolverá 1
, si el archivo no existe.
#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;
}
El programa imprimirá file exists
si el archivo demo.txt
y el programa C tienen la misma ubicación. Si el programa C y el nombre del archivo están en diferentes lugares, debemos especificar la ruta completa del archivo.
access()
Función para comprobar si un archivo existe en C
Otra forma de comprobar si el archivo existe es usar la función access()
. El archivo de cabecera unistd.h
tiene una función access
para comprobar si el archivo existe o no.
Podemos usar R_OK
para el permiso de lectura, W_OK
para el permiso de escritura, y X_OK
para el permiso de ejecución. Podemos usarlas juntas como R_OK
para permiso de lectura y escritura.
#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;
}
La salida es:
file is found
Aquí, C:\TEMP\demo.txt
es la ubicación del archivo. Si el archivo existe, imprime file is found
; de lo contrario, imprime file is not found
. La ubicación del programa y el archivo demo.txt
tienen la misma ubicación. De lo contrario, tenemos que especificar la ubicación del archivo. La combinación de las funciones stat()
y access()
es una buena elección para el sistema operativo Linux.
Otra forma de usar la función access()
es la siguiente:
#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);
}
}
La salida es:
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