IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

C++ windows créer des répertoires


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 22
    Par défaut C++ windows créer des répertoires
    Je voudrais savoir comment créer en C++ sous windows un répertoire ( system ("mkdir") ????) ...Comment tester que le répertoire existe déjà et ne rien faire dans ce cas là ?

    Merci.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    La CRT microsoft expose la fonction _mkdir(), tandis que l'API Win32 expose CreateDirectory().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Je rajouterais que pour tester si le répertoire existe déjà, tu peut utiliser la fonction _stat() qui permet d'indiquer à la fois si l'"élément" est présent sur le disque et si c'est un répertoire (ou bien un fichier, un pipe, ...).

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Par défaut atomicité
    Citation Envoyé par mchk0123 Voir le message
    Je rajouterais que pour tester si le répertoire existe déjà, tu peut utiliser la fonction _stat() qui permet d'indiquer à la fois si l'"élément" est présent sur le disque et si c'est un répertoire (ou bien un fichier, un pipe, ...).
    Attention : à chaque fois que tu fais un test sur l'état d'un système multitache, au moment où tu as le résultat il peut être déjà obsolète.

    De façon générale, il est inutile, redondant et créateur de faux espoirs d'utiliser access avant d'ouvrir un fichier pour vérifier si on le droit d'y accéder. Le plus simple, et plus sûr est d'essayer d'y accéder directement. Je ne comprends pas ceux qui s'embêtent avec access.

    C'est aussi pour ça qu'il faut utiliser open avec O_CREAT|O_EXCL pour être sûr de créer un fichier, et pas risquer d'ouvrir un fichier existant. (Et donc, il faut utiliser open et pas creat pour créer un fichier.)

    Concernant _mkdir, je citerai la doc MS :
    Citation Envoyé par MSDN : _mkdir, _wmkdir
    EEXIST

    Directory was not created because dirname is the name of an existing file, directory, or device.
    donc pas besoin de tester l'existence d'un fichier de même nom avant (enfin, d'après ce que je comprends; il n'est pas explicitement décrit ce que _mkdir fait si un fichier de même nom existe déjà - mais je pense que c'est suffisamment clair).

  5. #5
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Citation Envoyé par corrector Voir le message
    De façon générale, il est inutile, redondant et créateur de faux espoirs d'utiliser access avant d'ouvrir un fichier pour vérifier si on le droit d'y accéder. Le plus simple, et plus sûr est d'essayer d'y accéder directement. Je ne comprends pas ceux qui s'embêtent avec access.

    ...

    donc pas besoin de tester l'existence d'un fichier de même nom avant (enfin, d'après ce que je comprends; il n'est pas explicitement décrit ce que _mkdir fait si un fichier de même nom existe déjà - mais je pense que c'est suffisamment clair).
    Personnellement j'encadre les appels aux API renvoyant un code d'erreur par l'affichage d'un message d'erreur sibyllin et/ou l'émission d'un exception.

Discussions similaires

  1. Créer des répertoires en boucle à partir d'un JTextArea
    Par electr0n dans le forum Composants
    Réponses: 3
    Dernier message: 27/04/2012, 23h26
  2. [XL-2003] créer des répertoires
    Par luca.donati dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 01/12/2009, 16h53
  3. elever les droits de l'application Java pour créer des répertoires.
    Par turican2 dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 17/06/2009, 11h54
  4. Comment créer des répertoires et fichiers.
    Par killysui dans le forum ASP.NET
    Réponses: 4
    Dernier message: 11/06/2008, 19h54
  5. créer des répertoire dans un ftp
    Par debutantasp dans le forum IIS
    Réponses: 3
    Dernier message: 04/06/2008, 16h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo