Wie man prüft, ob eine Datei in C vorhanden ist
-
fopen()
Funktion zum Prüfen, ob eine Datei in C existiert -
stat()
Funktion zum Prüfen, ob eine Datei in C existiert -
access()
Funktion zum Prüfen, ob eine Datei in C existiert
Dieses Tutorial führt ein, wie man prüft, ob die Datei in C existiert. Die Art und Weise, wie man prüft, ob eine Datei existiert, ist der Versuch, die Datei im Lese- oder Schreibmodus zu öffnen. Dieses Programm öffnet eine Datei im Lesemodus.
fopen()
Funktion zum Prüfen, ob eine Datei in C existiert
#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;
}
Die Ausgabe ist:
file exists
Hier lautet der Dateiname demo.txt
. Das C-Programm und die Datei demo.txt
befinden sich im selben Verzeichnis. Die Ausgabe ist also file exists
.
Wenn der Ort des C-Programms und der Ort der Datei unterschiedlich sind, müssen wir den vollständigen Pfad der Datei angeben.
Wir können eine benutzerdefinierte Funktion erstellen und prüfen, ob die Datei existiert oder nicht. Unten sehen Sie das Programm mit einer benutzerdefinierten Funktion.
#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;
}
Das Programm gibt file exists
aus, wenn die Datei demo.txt
und das C-Programm den gleichen Speicherort haben. Wenn sich das C-Programm und der Dateiname an verschiedenen Orten befinden, müssen wir den vollständigen Pfad der Datei angeben.
stat()
Funktion zum Prüfen, ob eine Datei in C existiert
Wir lesen die Attribute der Datei mit der Funktion stat()
, anstatt Daten aus einer Datei zu lesen. Diese Funktion gibt 0
zurück, wenn die Operation erfolgreich ist; andernfalls gibt sie -1
zurück, wenn die Datei nicht existiert.
#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;
}
Das Programm gibt file exists
aus, wenn die Datei demo.txt
und das C-Programm den gleichen Speicherort haben. Wenn sich das C-Programm und der Dateiname an verschiedenen Orten befinden, müssen wir den vollständigen Pfad der Datei angeben.
access()
Funktion zum Prüfen, ob eine Datei in C existiert
Eine andere Möglichkeit zu prüfen, ob die Datei existiert, ist die Verwendung der access()
funktion. Die unistd.h
Header-Datei hat eine Funktion access
, um zu prüfen, ob die Datei existiert oder nicht.
Wir können R_OK
für die Leseberechtigung, W_OK
für die Schreibberechtigung und X_OK
für die Ausführungsberechtigung verwenden. Wir können sie zusammen als R_OK|W_OK
für die Lese- und Schreibberechtigung verwenden.
#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;
}
Die Ausgabe ist:
file is found
Hier ist C:\TEMPdemo.txt
der Speicherort der Datei. Wenn die Datei existiert, wird file is found
ausgegeben; andernfalls wird file is not found
ausgegeben. Das Programmverzeichnis und die Datei demo.txt
haben das gleiche Verzeichnis. Andernfalls müssen wir den Speicherort der Datei angeben. Die Kombination von stat()
und access()
Funktionen ist eine gute Wahl für das Linux-Betriebssystem.
Eine andere Möglichkeit, die access()
Funktion zu benutzen, ist wie unten beschrieben:
#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);
}
}
Die Ausgabe ist:
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