begin process at 2010 02 10 15:22:12
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

creer repertoire et sous repertoire


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

creer repertoire et sous repertoire

vendredi 18 mars 2005 à 09:52:08 | creer repertoire et sous repertoire

sdisp

Bonjour,
je souhaite permettre à l'utilisteur de mon programme d'entrer le repertoire de suvegarde de ses donnée.
Il devrai pouvoir entrer "c:\gdfjqd\jghfjghe\..."
Je me suis servie de mkdir() mais il ne fait pas les sous repertoire, dois-je chercher le caracter '\' et couper la chaine? Ou y a t'il une fonction toute faite.
Merci.
vendredi 18 mars 2005 à 19:14:02 | Re : creer repertoire et sous repertoire

Cornell711

On ne devrait pas avoir de problème avec ça [ Lien ] msdn est la solution à tous les problèmes.

@+
Cornell.
samedi 19 mars 2005 à 01:22:37 | Re : creer repertoire et sous repertoire

NitRic

mkdir() sous Windows utilise CreateDirectory() tout comme une grande partie de la libc sous Windows utilise l'API Windows. J'ai eu un certain doute quand même alors j'ai essayé mais CreateDirectory() à échoué pour:  CreateDirectory( "c:\\rep1\\rep2\\", NULL ); étant donné que c:\\rep1\\ n'existe pas alors j'ai fais ce p'tit bout de code:

BOOL MyMakeDir( char * szPath )
{

 char * path = szPath;

 /* on valide seulement l'existance du répertoire si la chaine est vide */
 if ( '\0' != *szPath )
 {
  /* si c'est un répertoire du genre:  .\\rep1\\rep2 */
  if ( '.' == *szPath )
  {
   /* on `skip`:  .\\ */
   szPath += 2;
  }
  /* si c'est un répertoire du genre:  c:\\rep1\\rep2 */
  else if ( ':' == *(szPath + 1) )
  {
   /* on `skip`:  c:\\ */
   szPath += 3;
  }
  do
  {
   do {
    /* si c'est un backslash on sort */
    if ( '\\' == *szPath )
    {
     break;
    }
    /* tant que l'on est pas à la fin de la chaine */
   } while ( '\0' != *++szPath );
   /* un backslash ici ... */
   if ( '\\' == *szPath )
   {
    /* on met un '\0' à la place du backslash temporairement */
    *szPath = '\0';
     /****************************************************
      *
      cré le répertoire, on ne récupère pas
      l'erreur s'il y en à une, car le répertoire
      peu très bien exister mais il faut continuer
      pour créer les sous-répertoires
      *
      ****************************************************/
     CreateDirectory( path, NULL );
    /* remet le backslash à sa place(retire le '\0') */
    *szPath++ = '\\';
   }
  }
  while ( '\0' != *szPath );

  /***************************************
   *
   La chaine peu très bien ne
   pas ce terminer par un backslash
   alors on tente une création final
   Si on avait une chaine du genre:
    - c:\\rep1\\rep2\\rep3
   Dans la boucle, il n'y à que:
    - c:\\rep1\\rep2\\
   de créé, alors il faut créer `rep3`
    - c:\\rep1\\rep2\\rep3
   *
   ***************************************/
  CreateDirectory( path, NULL );
 }

 /* Valide l'existance du répertoire(1 s'il existe, sinon 0) */
 return ( 0xffffffffu != GetFileAttributes( path ) );

}

char strPath[] = "c:\\rep1\\rep2\\rep3\\rep4";
BOOL bRetVal = MyMakeDir( strPath );


ce n'est rien d'extraordinaire mais ca fonctionne avec des répertoires du genre:
c:\\rep1\\rep2\\rep3\\
ou
c:\\rep1\\rep2
ou
.\\rep1\\rep2\\
ou
.\\rep1\\rep2
etc ...

ATTENTION:
  - Pas de nom de répertoire du genre:  c:rep1\\rep2\\  <<il manque un backslash ici, ca va planter s'il est manquant
  - Même chose avec le répertoire courant:  .rep1\\rep2\\ etc ...

En gros, la chaine doit commencer soit par `[lecteur]:\\` ou par `.\\`
exemples:
  - c:\\rep1
  - d:\\rep1\\rep2\\rep3\\rep4
  - .\\rep1\\rep2\\rep3
  - .\\rep1
  - etc ...




~(.:: NitRic ::.)~

lundi 21 mars 2005 à 18:33:33 | Re : creer repertoire et sous repertoire

sdisp

Réponse acceptée !

Merci pour vos réponse mais je m'en suis sortie de cette facon:
(elle autorise l'usage du \ ou \\ ou / ou // pour le chemin)

   #include <STDLIB.H>

   char cheminComplet[256] ;
   int indice ; 
   char chemin[256] ;
   bool creationOk = false ;

   /* Création du répertoire de sauvegarde */
   while (!creationOk)
   {   
    extern int errno ;

    for( int y=0 ; y<256 ; y++ )
    {
     chemin[y] = '\0' ;
    }
    printf("\r\n") ; 
    printf ( "Ou voulez vous sauvegarder: ") ;
    fflush(stdin);
    gets(cheminComplet) ;
    int x = strlen( cheminComplet ) ;
    if( cheminComplet[x-1] != '\\' )
    {
    cheminComplet[x] = '\\' ;
    cheminComplet[x+1] = '\0' ;
    }
    indice = 0 ;
    while (cheminComplet[indice] != '\0')
    {     
     if((cheminComplet[indice] == '\\') || (cheminComplet[indice] == '/')) // On cré le chemin de sauvegarde
     {                  // Etape par étape
      if( indice != 2 )
      {
       for (int i=0 ; i<indice ; i++)
       {
        chemin[i] = cheminComplet[i] ;
       }
       _mkdir(chemin) ;
       trouve = true ;
      }     
     }   
     indice++ ;
    }
    if( errno != 0 && errno != 17)
    {
     printf("Le chemin doit etre sous cette forme:\n");
     printf("c:\\td1\\tp2\n") ;            // aussi \ ou \\ ou / ou // pour le chemin 
    }
    else{
     creationOk = true ;
    }
   }



Cette discussion est classée dans : creer, repertoire, entrer


Répondre à ce message

Sujets en rapport avec ce message

creer un repertoire [ par vinc ] j'aimerais savoir comment creer un dossier, et savoir s'il est possible de se servir de la boite de dialogue Ouvrir ?merci d'avance Creation de repertoire sous borland [ par iexid ] bonjour je suis debutant sous borland et plus generalement en C++ (mais pas en Prog objet) et je voudrais savoir comment creer un repertoire .en fait Creer un repertoire de plusieur etage , comment faire ? [ par chuckboy ] BonjourJe suis capable de creer un répertoire ex c:\TOTOComment faire pour creer c:\TOTO\\TOTO1 (lorsque c:\TOTO) existe pas !!!!!thks Listing repertoire recrusif [ par firemax ] Bonjour Mon but est d'ecrire un programme de listing qui list aussi les repertoire , les sous repertoire , les sous sous repertoire et ainsi de suit Comment changer la lecture seul d'un repertoire ? [ par panik6666666 ] Bonjour a tous, J'ai une question bete: comment changer la lecture seul d'un repertoire ? j'ai essayé avec avec ca : HANDLE hFile = CreateFile(nom_r Apres un choix [ par Oruk ] Voila je sais pas si je vais etre claire mais pour faire simple je veut pour voi entrer des donnés apres avoir fait mon choix mais la je seche complet Votre avi sur un de mes projets. [ par bilaloch ] Bonjour,Desolé si l'endroit n'est pas vraiment fait pour ca mais il me semble que c'est celui qui va le mieux avec mon message... Voila, c'est juste p Creer en c++ un interpreteur sql sans sql [ par deizblood ] Voila en fait je doit creer avec C++ un programme qui lit des commandes comme en sql , que l'on rentre comme :CREATE TABLE xxxxx ( Valeur1 , Valeur2 , Entrer les valeur d'un tableau dans un fichier [ par Hkz ] Bonjour, je voudrai savoir comment faire et s'il était possible d'écrire toutes les données d'un tableau dans un fichier... voici se qui pose problem Creation d'un objet special [ par Toutoun13 ] Bonjour, Je cherche à creer un objet "Vignette" que je pourrais ajouter, supprimer et deplacer (drag & drop) sur une vue. Une "Vignette" doit se compo


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,655 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales