Cómo comprobar si un archivo existe en C

Satishkumar Bharadwaj 12 octubre 2023
  1. fopen() Función para comprobar si un archivo existe en C
  2. stat() Función para comprobar si un archivo existe en C
  3. access() Función para comprobar si un archivo existe en C
Cómo 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

Artículo relacionado - C File