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++Builder Discussion :

system() et "\\"


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    35
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 35
    Par d�faut system() et "\\"
    Salut salut,

    J'essaie d'executer une commande du style:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    void__fastcall ExecConv(String Root) 
      { 
       AnsiString chemin = "d:\\JIMMY\\dcm2jpg -f j d:\\essai " + Root; 
       system(chemin.c_str()); 
      }
    avec Root valant le string renvoy� par la fonction :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    SelectDirectory("OK","\\",Root);
    Le probl�me est que cette fonction renvoie un string genre "D:\toto" alors que la fonction syst�me veut du "D:\\toto"

    J'essai de delete les \ en faisant :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for(int i=1;i<=Root.Lenght();i++)
         {
          if (Root[i] == "\\")
               {
                Root.Delete(i,1);
                Root.Insert("\\\\",i);
                }
         }
    Mais rien � faire, mon prog se bloque!
    Je ne vois pas d'o� �� vient alors si quelqu'un � d�j� tent�...


    Cordialement

  2. #2
    Membre chevronn� Avatar de Dinytro
    Profil pro
    Inscrit en
    Ao�t 2003
    Messages
    402
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 402
    Par d�faut
    Pourquoi cette diff�rence alors que ni les fichiers ni le programme n'a chang� ? Windows fait des optimisations � l'insu de mon plein gr� ?
    c'est l'inverse alors. Tu enl�ves un \ alors qu'il faudrait en rajouter un non ?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    if (Root[i] == "\\")
    tu y rentreras jamais dans ce if ...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    35
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 35
    Par d�faut
    Si si.
    �� m'a �tonn� aussi mais tu ne peux pas �crire "/" de toute fa�on!

    "\\" signifie "\" et "\\\\" signifie "\\"

    j'ai essayer �� et �� a marcher mais j'�tais d�caller de 1 vers la gauche
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for(int i=1;i<=Root.Lenght();i++) 
         { 
          if (Root[i] == "\\") 
               { 
                Root.Delete(i,1); 
                Root.Insert("\\\\",i-1); 
                } 
         }
    �� donne �� : "D\\:tot\\otata".
    avec i � la place de i-1 �� devrait donner "D:\\toto\\tata" mais non...�� bloque le prog

    C'est le insert qui ne fonctionne pas bien mais je ne vois pas...

  4. #4
    R�dacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Par d�faut Re: system() et "\\"
    Citation Envoy� par La March
    Le probl�me est que cette fonction renvoie un string genre "D:\toto" alors que la fonction syst�me veut du "D:\\toto"
    NON !
    Que ce soit bien clair. Le doublement du slash est du au fait que c'est le caract�re d'�chapement en C++, et que donc pour en avoir un vraiment dans la cha�ne, il faut le doubler. Il est impossible qu'une fonction retourne des simples slash. En effet, la chaine "D:\toto" voudrait alors dire :
    "D:<tabulation>oto", ce qui est impensable !

    Il s'agit uniquement d'une norme de codage des caract�res.

    Fait l'essai en r�cup�rant le texte d'un TEdit avec des simples slashes, et tu verras qu'en m�moire, il ya bien des double slashes.

    Ton probl�me ne vient pas de l� !

  5. #5
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    NON !
    Que ce soit bien clair. Le doublement du slash est du au fait que c'est le caract�re d'�chapement en C++, et que donc pour en avoir un vraiment dans la cha�ne, il faut le doubler. Il est impossible qu'une fonction retourne des simples slash. En effet, la chaine "D:\toto" voudrait alors dire :
    "D:<tabulation>oto", ce qui est impensable !

    Il s'agit uniquement d'une norme de codage des caract�res.

    Fait l'essai en r�cup�rant le texte d'un TEdit avec des simples slashes, et tu verras qu'en m�moire, il ya bien des double slashes.

    Ton probl�me ne vient pas de l� !
    Je suis d'accord avec le raisonnement, mais la chute me para�t erronn�e. Lorsqu'on tape \\, le compilo l'interprete comme un \ donc la chaine finale en m�moire contient toujours des simples anti-slashs.

    Il suffit de retenir que la s�quence '\\' dans un code C++ �quivaut au caract�re '\' en m�moire.

    Mais personnellement je ne m'embarasse jamais avec les anti-slashs, sachant que les slashs '/' fonctionnent tout aussi bien sous Windows...

  6. #6
    R�dacteur
    Avatar de Greybird
    Inscrit en
    Juin 2002
    Messages
    673
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 673
    Par d�faut
    Citation Envoy� par Loulou24
    Je suis d'accord avec le raisonnement, mais la chute me para�t erronn�e. Lorsqu'on tape \\, le compilo l'interprete comme un \ donc la chaine finale en m�moire contient toujours des simples anti-slashs.

    Il suffit de retenir que la s�quence '\\' dans un code C++ �quivaut au caract�re '\' en m�moire.
    Tu as tout � fait raison, mea culpa. Je voulais dire qu'un espion pr�sentant la cha�ne de caract�re "� la C++" montrerait un double slash, ce que j'ai traduit de mani�re erron�e par "en m�moire".
    Citation Envoy� par Loulou24
    Mais personnellement je ne m'embarasse jamais avec les anti-slashs, sachant que les slashs '/' fonctionnent tout aussi bien sous Windows...
    Tout � fait (ruse )

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    35
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 35
    Par d�faut

    je crois que j'ai � peu pr�s compris se que vous vouliez dire par l�.
    Mais j'arrive pas � croire que \=/ . :o

    Sinon merci quand m�me j'ai trouv� gr�ce � vos explications.

    Si j'affiche mon chemin renvoy� par SelectDirectory() , �� me donne:
    "D:\toto\tata"
    alors qu'en fait c'est "D:\\toto\\tata" en 'm�moire' ...
    Donc mon
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    void__fastcall ExecConv(String Root) 
      { 
       AnsiString chemin = "d:\\JIMMY\\dcm2jpg -f j d:\\essai " + Root; 
       system(chemin.c_str()); 
      }
    fonctionne.
    j'avais pas essay�, �� me paraissait mort.


    Merci et @++

+ R�pondre � la discussion
Cette discussion est r�solue.

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