Wie man prüft, ob eine Datei in C vorhanden ist

Satishkumar Bharadwaj 12 Oktober 2023
  1. fopen() Funktion zum Prüfen, ob eine Datei in C existiert
  2. stat() Funktion zum Prüfen, ob eine Datei in C existiert
  3. access() Funktion zum Prüfen, ob eine Datei in C existiert
Wie man prüft, ob eine Datei in C vorhanden ist

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

Verwandter Artikel - C File