Verifier l'existance d'un répertoire [Résolu]

Messages postés
40
Date d'inscription
mercredi 10 mai 2006
Dernière intervention
5 juin 2008
- 24 janv. 2007 à 13:32 - Dernière réponse :
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Dernière intervention
16 février 2009
- 24 janv. 2007 à 22:01
Bonjour,
comment pourrai-je verifier en C++ si un répertoire existe et si j'ai les droits en écriture sur ce dernier.

merci pour votre aide
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Dernière intervention
11 janvier 2009
24 janv. 2007 à 13:44
3
Merci
Salut !

Pour vérifier l'existance d'un dossier voilà une fonction :/*Existence ou non du dossier*/
bool DossExist(char * Chemin)
{
    if((GetFileAttributes(Chemin) & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY) return true;
    else return false;
}

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"

Merci yoyo269 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de yoyo269
Meilleure réponse
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Dernière intervention
11 janvier 2009
24 janv. 2007 à 13:46
3
Merci
Pardon, pour les droits d'écritures, c'est à peu près la même chose que l'autre fonction, sauf que tu dois te servir de FILE_ATTRIBUTE_READONLY qui te dit que le dossier est uniquement en lecture (donc pas en écriture ).

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"

Merci yoyo269 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de yoyo269
Messages postés
40
Date d'inscription
mercredi 10 mai 2006
Dernière intervention
5 juin 2008
24 janv. 2007 à 13:59
1
Merci
cool !!

merci YOYO

à plu'ch
Commenter la réponse de dacor
Messages postés
40
Date d'inscription
mercredi 10 mai 2006
Dernière intervention
5 juin 2008
24 janv. 2007 à 14:23
0
Merci
excuza
mais je n'ai pas trouvé la librairie que je dois utiliser #include<?>
Commenter la réponse de dacor
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Dernière intervention
11 janvier 2009
24 janv. 2007 à 14:25
0
Merci
#include <windows.h>

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
Commenter la réponse de yoyo269
Messages postés
40
Date d'inscription
mercredi 10 mai 2006
Dernière intervention
5 juin 2008
24 janv. 2007 à 14:36
0
Merci
euh...je suis sous linux
je vais chercher mais si t'as une piste je suis preneur
Commenter la réponse de dacor
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Dernière intervention
11 janvier 2009
24 janv. 2007 à 14:39
0
Merci
LOL !
Ca va beaucoup moins bien marcher forcément !
Pense à le préciser la prochaine fois stp.
Là comme ça sous linux j'en ai aucune idée. Désolé.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
Commenter la réponse de yoyo269
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Dernière intervention
16 février 2009
24 janv. 2007 à 22:01
-1
Merci
Je crois que c'est fesable avec access.

J'ai testé ceci avec ceci:

if(!access("/projetC++/testfonction", R_OK)) printf("disponible pour lecture\n");

else printf("non disponible pour lecture\n");


Dans mon cas, /projetC++/testfonction existe bien et j'ai les droits de
lecture dessus donc ça écrit bien "disponible". Si je modifie le path
vers un rep inexistant, ça écrit bien "non disponible".

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++ (@++)
Commenter la réponse de SAKingdom

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.