6 Stimmen

c die Berechtigungen einer Datei lesen

Wie kann ich überprüfen, ob eine Datei in C Leserechte hat?

9voto

caf Punkte 224189

Verwenden Sie access(2) in POSIX. In Standard C können Sie bestenfalls versuchen, sie mit fopen() und sehen Sie, ob sie erfolgreich ist.

Si fopen() gibt zurück. NULL können Sie versuchen zu verwenden errno zu unterscheiden zwischen der Meldung "Datei existiert nicht" ( errno == ENOENT ) und "Erlaubnis verweigert" ( errno == EACCES ) Fälle - aber leider sind diese beiden errno Werte sind ebenfalls nur durch POSIX definiert.

(Sogar unter POSIX ist es in den meisten Fällen am besten, zu versuchen, die Datei zu öffnen, und dann nachzusehen, warum es fehlgeschlagen ist, denn mit access() führt zu einer offensichtlichen Race Condition).

8voto

user47559 Punkte 1211

Ich bin ein Fan der Verwendung von stat() selbst.

7voto

RichieHindle Punkte 256891

Verwenden Sie die Zugriff() Funktion:

if (access(pathname, R_OK) == 0)
{
    /* It's readable by the current user. */
}

errno wird eingestellt auf ENOENT wenn die Datei nicht existiert, oder EACCES wenn sie existiert, aber für den aktuellen Benutzer nicht zugänglich ist. Siehe die Handbuchseite für weitere Fehlercodes.

1voto

Isbees Punkte 1

Es gibt viele Möglichkeiten, die Berechtigungen einer Datei zu überprüfen.

Eine sehr einfache Methode, um die Berechtigungen herauszufinden, ist int access(const char *path, int amode) . Wie bereits erwähnt, funktioniert diese Methode, solange kein Fehler auftritt. Es gibt ein paar Flags, die Sie verwenden können:

F_OK: Wird verwendet, um zu prüfen, ob eine Datei vorhanden ist.

R_OK: Dient zur Prüfung der Leseerlaubnis.

W_OK: Dient zur Überprüfung des Bits für die Schreibberechtigung.

X_OK: Wird verwendet, um das Ausführungserlaubnis-Bit zu prüfen.

Wenn die Datei nicht die richtigen Berechtigungen hat, wird ein Fehler ausgegeben, den Sie mit errno beheben können.

int fd = access("sample.txt", F_OK); 
if(fd == -1){ 
        printf("Error Number : %d\n", errno); 
    perror("Error Description:"); 
} 

Wenn Sie einen Fehler beim Abrufen einer Dateiadresse behandeln wollen, verwenden Sie FILE *fopen(const char *filename, const char *mode) . Wie access() hat es Flags, die Sie überprüfen können, z. B. read oder write. Der Unterschied ist, dass fopen Zeichenketten statt Konstanten verwenden kann und einen DATEI-Zeiger zurückgibt.

FILE *pf = fopen ("fileName.txt", "rb");

Aquí ist ein gutes Beispiel für die Fehlerbehandlung mit fopen

Eine dritte Methode der Dateiprüfung ist int chmod(const char *pfad, mode_t mode) . chmod() ist nützlicher als access(), da es mehr Flags hat. Je nachdem, aus welchem Verzeichnis Sie lesen, könnte es einfacher sein, nur access() zu verwenden, aber wenn Sie viele Dateien mit unterschiedlichen Berechtigungen haben, wäre chmod() nützlicher.

#include <sys/stat.h>
int chmod(const char *path, mode_t mode);

Ich weiß, dass dieser Beitrag bereits 11 Jahre alt ist. Ich wollte nur einen allgemeinen Überblick über gängige Methoden der Dateiverarbeitung geben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X