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 :

creation repertoire


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 29
    Points : 28
    Points
    28
    Par défaut creation repertoire
    bonjour tout le monde
    je suis entrain de faire un programme qui copie une arborescence source dans une arborescnce destination et j'ai une question sur
    int mkdir(char const * name, mode_t mode); définie sur stat.h
    ma question est la suivante:
    si par exemple je veux créer un répertoire /home/x



    l'appel dessus marche bien.
    par contre
    si je veux créer des repertoires /home/a/b/c
    sachant que a,b,c n'existent pas(en fait l'équivalent de mkdir -p arg)
    cela ne marche pas.
    y'a t-il un moyen de spécifier à mkdir de créer tout les répertoires .
    ds ce cas a puis b puis c :
    merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    D'apres la bible (man), non !
    Apres il dois bien y avoir un moyen de le faire je pense notamment a la fonction system().

    system("mkdir -p arg");
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 29
    Points : 28
    Points
    28
    Par défaut
    merci
    je croyais qu'il y avait un moyen de le faire avec mkdir sans passer par system car dans le fond j'ai pas le droit d'utiliser system

  4. #4
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut
    Le man n'indique rien dans ce sens mais il suffit d'etre un peu debrouillard pour avoir le comportement désiré.

    Si mkdir(repertoire) renvoie -1 et errno = ENOTDIR
    créer_répertoire( dirname(repertoire ));
    mkdir(repertoire);

    Désolé du mélange pseudo-algo / C.

  5. #5
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par zul
    Le man n'indique rien dans ce sens mais il suffit d'etre un peu debrouillard pour avoir le comportement désiré.

    Si mkdir(repertoire) renvoie -1 et errno = ENOTDIR
    créer_répertoire( dirname(repertoire ));
    mkdir(repertoire);

    Désolé du mélange pseudo-algo / C.
    ENOTDIR je n'ai rien vu de tel dans la page de man de mkdir

    Citation Envoyé par man
    ERREURS

    EPERM Le système de fichiers contenant pathname ne permet
    pas la création de répertoires.

    EEXIST pathname existe déjà (pas nécessairement un réper*
    toire). Ceci inclut le cas où pathname est un lien
    symbolique, pointant quelque part ou pas.

    EFAULT pathname pointe en-dehors de l'espace d'adressage
    accessible.

    EACCES Le répertoire parent n'autorise pas l'écriture au
    processus, ou l'un des répertoires de pathname
    n'autorise pas la consultation de son contenu.

    ENAMETOOLONG
    pathname trop long.

    ENOENT Un répertoire du chemin d'accès pathname n'existe
    pas ou est un lien symbolique pointant nulle part.
    Un élément utilisé dans le chemin pathname n'est
    pas un répertoire.

    ENOMEM Pas assez de mémoire pour le noyau.

    EROFS pathname serait sur un système de fichier en lec*
    ture seule.

    ELOOP pathname contient une référence circulaire (à
    travers un lien symbolique).

    ENOSPC Le périphérique contenant pathname n'a pas assez de
    place pour le nouveau répertoire. Cette erreur se
    produit également si le quota de disque de l'util*
    isateur est dépassé.
    Apres si cela marche, il reste un probleme si il demande mkdir a/b/c si mkdir echou comment savoir si c'est le repertoire a ou b qui n'existe pas. Il faudrait faire encore des tests. Toutefois je pense que cela reste pour l'instant la meilleure (la seule pour l'instant meme) solution, si il ne peux utiliser system()
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  6. #6
    zul
    zul est déconnecté
    Membre éclairé Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Points : 699
    Points
    699
    Par défaut
    ENOTDIR
    A component used as a directory in pathname is not, in fact, a
    directory.
    Mais en fait, ce n'est pas ENOTDIR qu'il faut vérifier mais ENOENT.

    Tu peux utiliser cette fonction récursivement pour créer tes répertoires. C'etait mon idée premiere en fait.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 29
    Points : 28
    Points
    28
    Par défaut
    pour ces informations assez intéressantes

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/07/2012, 12h16
  2. Script Creation repertoire Personnel
    Par jbertin9 dans le forum VBScript
    Réponses: 0
    Dernier message: 04/05/2011, 12h58
  3. creation repertoire dans dossier
    Par ericdev67 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/03/2008, 14h40
  4. creation repertoire partagé
    Par libremax dans le forum VBA Access
    Réponses: 2
    Dernier message: 21/05/2007, 18h00
  5. [portabilité] creation repertoire
    Par drKzs dans le forum C++
    Réponses: 8
    Dernier message: 28/02/2007, 11h06

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