Controlla se un file esiste in C
-
Funzione
fopen()
per verificare se un file esiste in C -
Funzione
stat()
per verificare se un file esiste in C -
Funzione
access()
per verificare 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