Partage
  • Partager sur Facebook
  • Partager sur Twitter

Création d'un dossier en C

system("md nom_du_dossier");

Sujet résolu
Anonyme
    27 juin 2007 à 17:06:40

    Bonjour, je susi nouveau sur ce forum.

    Je cherche une fonction qui permet de crée un dossier.

    Après quelque recherche sur le net j'ai trouvé sa :

    Citation : Pas de titre

    system("md nom_du_dossier");



    mais le problème c'est que je voudrais que la console demande à l'utilisateur le nom du dossier qu'on voudrais crée.

    Et le truc c'est qu'avec system " ("md nom_du_dossier"); ", on ne peut pas metre un variable à l'intérieur.

    donc j'aimerais savoir si une autre fonction existe.

    (j'espère que vous avez compris mon problème)

    le code que j'ai fait pour demandé le nom du dossier :

       

    char dossier[100] = {0};
       
     
        printf("    Quelle est le numero du dossier ? ");
        fgets(dossier, sizeof(dossier), stdin);
        clean(dossier, stdin);
     
       
        printf("\n\n");
        printf("       Dossier numero : %s\n\n\n", dossier);


    Merci de vos réponses.
    • Partager sur Facebook
    • Partager sur Twitter
      27 juin 2007 à 18:01:39

      Salut,

      Avec Visual C++ :
      #include <direct.h>
      int _mkdir(const char *dirname);


      Avec la bibliothèque C GNU :
      #include <sys/stat.h>
      #include <sys/types.h>

      int mkdir(const char *dirname, mode_t mode);

      mode (sous Unix et assimilés) représente les permissions à affecter au nouveau répertoire.
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        27 juin 2007 à 18:12:20

        Bon ben merci " gouttegd "

        sa marche parfaitement :D
        • Partager sur Facebook
        • Partager sur Twitter
          27 juin 2007 à 18:19:13

          Bienvenue sur le sdz !

          Tu peux utiliser les commandes que gouttegd t'as précisé, je voudrais juste préciser quelque chose sur la fonction system(), celle ci en faite va taper une commande spécifique à ton OS. Voici le prototype de cette fonction:

          #include <stdlib.h>
          int system (const char * string);


          tu peux donc faire dans ton cas:

          #include <stdlib.h>
          #include <stdio.h>
          #include <string.h>

          int main(int argc, char *argv[])
          {

                  char dossier[100] = {0};
                  char cmd[110] = "md ";
             
           
              printf("\tQuelle est le nom du dossier ? ");
              scanf("%s", dossier);
           
              printf("\n\tnom du dossier : [%s]\n", dossier);

                  strcat(cmd, dossier);

                  system(cmd);


                  return 0;
          }

          Mais je te le déconseille car ceci n'est pas portable, en effet, les commandes executés dans la console de windows ne sont pas les mêmes que dans d'autre OS ! Par exemple, sur Mac et Linux, j'aurais du faire:
          char cmd[110] = "mkdir ";


          Donc,

          #include <stdlib.h>
          #include <stdio.h>
          #include <string.h>

          int main(int argc, char *argv[])
          {

                  char dossier[100] = {0};
                  char cmd[110] = "mkdir ";
             
           
              printf("\tQuelle est le nom du dossier ? ");
              scanf("%s", dossier);
           
              printf("\n\tnom du dossier : [%s]\n", dossier);

                  strcat(cmd, dossier);

                  mkdir(cmd, NULL);


                  return 0;
          }


          Et tu remplaces le NULL par les droits d'accès.
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            27 juin 2007 à 19:16:53

            ok bon a savoir ;)

            merci

            EDIT :

            J'ai un nouveau problème

            je voudrais créé un dossier dans un autre dossier puis écrire un fichier dans le dernier dossier
            donc :


            #include <stdio.h>
            #include <stdlib.h>
            #include <string.h>
            #include <direct.h>

            void clean(const char *buffer, FILE *fp);
            int _mkdir(const char *dirname);

            int main(int argc, char *argv[])
            {

            char demo[] = "demo";
            char dossier[100] = {0};
            char demo1[] = "demo/";
            char slash[] = "/";
            char extension[] = ".txt";
            char dossier2[100] = {0};

                printf("    Quelle est le numero du dossier ? ");
                fgets(dossier, sizeof(dossier), stdin);
                clean(dossier, stdin);
             

            _mkdir(demo);

            _mkdir(dossier)/* /!\  VOILA c'est la où je coince, je voudrais que le dossier "dossier" (qui est changé en fonction de ce que met l'utilisateur) se cré dans le dossier "demo" et non à la racine du programme */

                strcpy(dossier2, dossier);

                strcat(dossier2, slash);     // création de **/
                strcat(dossier2,dossier);    // création de **/**
                strcat(dossier2, extension); // création de **/**.txt
                strcat(demo1, dossier2);     // création de demo/**/**.txt

              FILE* fichier = NULL;
                fichier = fopen(demo1, "a");
               
                if (fichier != NULL)  // écriture dans le fichier (QUI ne marche pas vu que le dossier ne peut pas étre créé a cause du problème au dessus)
                {
                   fprintf(fichier, "//-----------------------------\n")
                   fprintf(fichier, "//-- Avancement des dossiers --\n")
                   fprintf(fichier, "//-----------------------------\n\n\n");
                     
                   fclose(fichier);
                }
                return 0;
            }





            Vu que je n'allais pas recopié le code tout entier que j'ai fait j'ai mis juste la parti qui posé problème.

            J'espère que vous avez compris mon problème :)
            et merci de m'aidé.
            • Partager sur Facebook
            • Partager sur Twitter
              27 juin 2007 à 20:31:57

              Pour créer le deuxième dossier, il te suffit de passer à _mkdir() le chemin relatif vers ce dossier ("demo/le_nom_choisi_par_l'utilisateur").

              Cela donnerait donc quelque chose comme ça :
              _mkdir(demo); /* création du premier dossier */

              sprintf(dossier2, "demo/%s", dossier);
              _mkdir(dossier2); /* création du second dossier */
              • Partager sur Facebook
              • Partager sur Twitter
                27 juin 2007 à 20:35:55

                "direct.h pour Visual C++"
                ..mais existe t'il un equivalent pour MinGW?
                • Partager sur Facebook
                • Partager sur Twitter
                  27 juin 2007 à 21:43:46

                  Oui, puisque MinGW utilise la bibliothèque C GNU. ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    27 juin 2007 à 22:15:03

                    Citation : KiKoO

                    Bonjour, je susi nouveau sur ce forum.

                    Je cherche une fonction qui permet de crée un dossier.


                    Il n'y a pas de fonction C standard pour faire ça. Par contre il existe mkdir() (<dir.h>) qui est POSIX.1, donc très portable.

                    mkdir() : création
                    chdir() : changement de répertoire
                    rmdir() : suppression
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Music only !
                    Anonyme
                      28 juin 2007 à 4:25:44

                      Merci pour toute vos réponses

                      mon programme marche parfaitement now :)
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Création d'un dossier en C

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown