Gibt es einen besseren Weg als einfach zu versuchen, die Datei zu öffnen?
int exists(const char *fname)
{
FILE *file;
if ((file = fopen(fname, "r")))
{
fclose(file);
return 1;
}
return 0;
}
fopen()
/ fclose()
-Methode falsch ist, ist, dass Sie möglicherweise keine Datei zum Lesen öffnen können, obwohl sie existiert. Zum Beispiel /dev/kmem
existiert, aber die meisten Prozesse können es nicht einmal zum Lesen öffnen. /etc/shadow
ist eine andere solche Datei. Natürlich beides stat()
und darauf access()
angewiesen, auf das Verzeichnis zugreifen zu können, das die Datei enthält; Alle Wetten sind deaktiviert, wenn Sie dies nicht tun können (keine Ausführungsberechtigung für das Verzeichnis, das die Datei enthält).
if (file = fopen(fname, "r"))
wird eine Warnung geben. Verwenden Sie Klammern um Anweisung innerhalb der if-Anweisungif ((file = fopen(fname, "r")))