Controlla se un file esiste in C

Satishkumar Bharadwaj 12 ottobre 2023
  1. Funzione fopen() per verificare se un file esiste in C
  2. Funzione stat() per verificare se un file esiste in C
  3. Funzione access() per verificare se un file esiste in C
Controlla se un file esiste in C

Questo tutorial introduce come verificare se il file esiste in C. Il modo per verificare se un file esiste è provare ad aprire il file in modalità di lettura o scrittura. Questo programma sta aprendo un file in modalità di lettura.

Funzione fopen() per verificare se un file esiste in 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;
}

L’output è:

file exists

Qui il nome del file è demo.txt. Il programma C e il file demo.txt si trovano nella stessa directory. Quindi l’output è il file esiste.

Se il percorso del programma C e il percorso del file sono diversi, è necessario specificare il percorso completo del file.

Possiamo creare una funzione definita dall’utente e controllare se il file esiste o meno. Di seguito è riportato il programma con una funzione definita dall’utente.

#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;
}

Il programma stamperà file esiste se il file demo.txt e il programma C hanno la stessa posizione. Se il programma C e il nome del file si trovano in posizioni diverse, è necessario specificare il percorso completo del file.

Funzione stat() per verificare se un file esiste in C

Leggiamo gli attributi del file utilizzando la funzione stat() invece di leggere i dati da un file. Questa funzione restituirà 0 se l’operazione è andata a buon fine; altrimenti, restituirà -1, se il file non esiste.

#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;
}

Il programma stamperà file exists se il file demo.txt e il programma C hanno la stessa posizione. Se il programma C e il nome del file si trovano in posizioni diverse, è necessario specificare il percorso completo del file.

Funzione access() per verificare se un file esiste in C

Un altro modo per verificare se il file esiste è usare la funzione access(). Il file di intestazione unistd.h ha una funzione access per verificare se il file esiste o meno.

Possiamo usare R_OK per il permesso di lettura, W_OK per il permesso di scrittura e X_OK per eseguire il permesso. Possiamo usarli insieme come R_OK|W_OK per leggere e scrivere i permessi.

#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;
}

L’output è:

file is found

Qui, C:\TEMPdemo.txt è il percorso del file. Se il file esiste, stampa file is found; altrimenti, stampa file is not found. La posizione del programma e il file demo.txt hanno la stessa posizione. Altrimenti, dobbiamo specificare la posizione del file. La combinazione delle funzioni stat() e access() è una buona scelta per il sistema operativo Linux.

Un altro modo per utilizzare la funzione access() è il seguente:

#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);
  }
}

L’output è:

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

Articolo correlato - C File