Crée dossier en c++

Résolu/Fermé
Utilisateur anonyme - Modifié par astrocurieux le 3/08/2016 à 10:09
 Utilisateur anonyme - 4 août 2016 à 18:16
Bonjour tout le monde,

voici deux petite fonction qui normalemen devrais faire exactement la méme chose, mais je ne sait pas laquel est la plus acceptable / optimisé ...
d'autant que pour le moment elles ne veule pas fonctionner tel que je l'attend .
je passe a tout les coup dans ma fonction erreur() sans savoir pourquoi ....
une idée ?

voici le code :
void RansW::creatDir()
{
  std::stringstream buff;
  std::string cmdS;
  const char* cmdC;

  buff << "mkdir Depot/" << this->d2 << this->d1;
  cmdS = buff.str();
  cmdC = cmdS.c_str();
  if (mkdir(cmdC, 777) == -1)
    error(9);
}


void RansW::creatDir()
{
  std::stringstream buff;
  const char* cmdC;

  buff << "mkdir Depot/" << this->d2 << this->d1;
  cmdC = buff.str().c_str();
  if (mkdir(cmdC, 777) == -1)
    error(9);
}



this->d1 et this->d2 sont deux lettres majuscule.
je cherche a crée plusieur dossier dans un seul dossier 'Depot' au méme endroie que mon executable, chaque dossier aura un nom genérer dynamiquement.

j'attend vos critiques / consseils / insultes avec impatience, merci !


A voir également:

1 réponse

paly2 Messages postés 254 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 15 février 2018 25
Modifié par paly2 le 3/08/2016 à 11:22
La deuxième fonction devrait fonctionner aussi bien que la première, elle est même mieux (à mon goût). Note que tu peux même directement passer buff.str().c_str() à mkdir, ce qui t'évite la variable cmdC.

Ton problème est que le mode que tu passes à mkdir n'est pas valide. Tu dois en effet le passer en base octale (ce qui se fait en le faisant précéder par un 0).
mkdir(cmdC, 0777)


Si tu veux le passer en décimal (ce que je te déconseille), cela fait 7×8² + 7×8¹ + 7×8⁰ = 511.


La curiosité est une excellente qualité !
0
bien vue Paly2 cette optimisation ma echappé.
et merci pour l'histoire de la base octal, ca va certainement m'évité d'autre erreurs plus tard.
mais pour le moment ma fonction ne fonctionne toujours pas ...

void RansW::creatDir()
{
  std::stringstream buff;

  buff << "mkdir Depot/" << this->d2 << this->d1;
  if (mkdir(buff.str().c_str(), 0777) == -1)
    error(9);
}


il continue a entré dans error(9).
j'ai verifié que this->d1 et d2 ne soit pas faux mais méme pas ... les deux valent 'A' pour le moment.
ducoup buff.str() vaut 'mkdir Depot/AA' et je vous assure que mon dossier Depot existe bien .

quelqu'un peu tester cela sur son propre compilo pour me dire ce que sa donne de votre coté ?

merci de votre reactivité !
0
paly2 Messages postés 254 Date d'inscription vendredi 29 août 2014 Statut Membre Dernière intervention 15 février 2018 25
4 août 2016 à 17:26
Ah, je n'avais pas vu le "mkdir" dans la chaîne, drôle d'idée :-) Il suffit de passer à mkdir "Depot/AA", rien de plus.

La variable globale errno peut t'aider à déboguer ton programme. La fonction perror() de stdio.h est très pratique, elle affiche un message d'erreur correspondant à la valeur de errno.
Par exemple:
if (mkdir(buff.str().c_str(), 0777) == -1) {
    perror("Erreur dans la fonction mkdir");
    error(9);
}

Affichera un message d'erreur clair préfixé de "Erreur dans la fonction mkdir:".
0
Utilisateur anonyme
4 août 2016 à 18:16
mince, dur a assumer effectivement ...

je te remercie pour tout, sa fonctionne a merveille !
0