Test d'existence d'un fichier

Signaler
Messages postés
26
Date d'inscription
dimanche 20 mars 2005
Statut
Membre
Dernière intervention
18 août 2008
-
Messages postés
212
Date d'inscription
dimanche 3 avril 2005
Statut
Membre
Dernière intervention
28 mai 2011
-
bonjour tout le monde
pouvez vous me dire si quelqu'un sait comment on teste si un fichier existe en C
merci d'avance

4 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
_access()
à vérifier.

ciao...
BruNews, MVP VC++
Messages postés
151
Date d'inscription
mardi 12 octobre 2004
Statut
Membre
Dernière intervention
15 avril 2009

using
namespace System;
usingnamespace System::IO;

File::Exist("C:\\bob.txt");

-----
Sinon, essais avec fstream.
fstream f;
f.open("C:\\bob.txt");
la fonction retournera kkchose de spécial si la fichier n'existe pas...

Pepsidrinker
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
C'est bien access (pas de _)

Documentation:

NOM
 access - Vérifier les permissions d'accès à un fichier.

SYNOPSIS
#include

int access(const char *pathname, int mode);

DESCRIPTION
access vérifie si le processus serait autorisé à lire, écrire, exécuter, ou tester l'existence d'un fichier (ou d'un autre objet appartenant au système de fichiers), dont le nom est pathname.
Si pathname est un lien symbolique, ce sont les permissions du fichier pointé par celui-ci qui sont testées.
mode est un masque constitué d'un ou plusieurs arguments liés par un OU binaire ( | ) R_OK, W_OK, X_OK et F_OK.
Les requêtes R_OK, W_OK et X_OK servent respectivement à tester la lecture, l'écriture, et l'exécution du fichier. La requête F_OK teste si la vérification d'existence du fichier serait autorisée (ceci dépendant des permissions des répertoires apparaissant dans le chemin pathname et éventuellement des liens symboliques rencontrés sur ce chemin).
Le test est effectué avec les User-ID et Group-ID réels du processus, plutôt qu'avec les IDs effectifs qui sont utilisés lorsque l'on tente l'opération. Ceci permet aux programmes Set-UID de déterminer les autorisations de l'utilisateur ayant invoqué le programme.
Seuls les bits d'accès sont vérifiés, et non pas le contenu du fichier. Ainsi si l'écriture est autorisée dans un répertoire, ceci signifie que l'on peut créer des fichiers dans ce répertoire, et non pas que l'on puisse y écrire comme dans un fichier. Également, un fichier DOS peut être considéré comme exécutable, alors que l'appel système execve(2) échouera évidemment.
Si le processus a les privilèges suffisants, une implémentation peut indiquer un succès pour X_OK même si le fichier n'a aucun bit d'exécution positionné.

VALEUR RENVOYÉE
access renvoie 0 s'il réussit (toutes les requêtes sont autorisées), ou -1 s'il échoue (au moins une requête est interdite), auquel cas errno contient le code d'erreur.

ERREURS
EACCES
L'accès serait refusé au fichier lui-même, ou il n'est pas permis de parcourir l'un des répertoires de pathname.
EROFS
On demande une écriture sur un système de fichiers en lecture-seule.
EFAULT
pathname pointe en dehors de l'espace d'adressage accessible.
EINVAL
mode était mal spécifié.
ENAMETOOLONG
pathname est trop long.
ENOENT
Un répertoire contenu dans le pathname aurait été accessible mais n'existe pas, ou est un lien symbolique pointant dans le vide.
ENOTDIR
Un élément contenu dans le chemin pathname n'est pas un répertoire.
ENOMEM
Pas assez de mémoire pour le noyau.
ELOOP
pathname contient une référence circulaire (à travers un lien symbolique).
EIO
erreur générique d'entrée/sortie.

EXEMPLE
#include <stdio.h>
#include

int main (void)
{
        char * nom_fichier = "/etc/passwd";
        if (access (nom_fichier, W_OK) == 0) {
                fprintf (stdout, "Écriture Ok !");
                if (getuid() != 0) { /* 0 <=> Super-User */
                        fprintf (stdout, "Danger !");
                }
        }
        return (0);
}

RESTRICTIONS
access renvoie une erreur si l'un quelconque des types d'accès est refusé, même si les autres sont acceptés.

 Il est possible qu'access ne fonctionne pas correctement sur un serveur NFS si les correspondances d'UID sont activées, car ces correspondances sont gérées par le serveur, et masquées au client qui effectue les vérifications d'autorisation.

 Utiliser access pour vérifier si un utilisateur a le droit, par exemple, d'ouvrir un fichier avant d'effectuer réellement l'ouverture, risque de créer un trou de sécurité. En effet, l'utilisateur peut exploiter le petit intervalle de temps entre la vérification et l'accès effectif pour modifier le fichier.

C++ (@++)<!--
Messages postés
212
Date d'inscription
dimanche 3 avril 2005
Statut
Membre
Dernière intervention
28 mai 2011
2
si non une maniére alternative mais pas rigoureuse c'est de tester la
valeur de retour de la fonction fopen, Si c'est NULL alors probablement
il n'existe po mais des fois ca renvoi NULL à cause de l'echec
d'ouverture

<hr size="2" width="100%" />Trafic web gratuit!!!