Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1011 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  C++ commandes system("..") windows

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

C++ commandes system("..") windows

n°1610990
eX-
Posté le 12-09-2007 à 13:39:34  profilanswer
 

bonjour,  
 
j'ai un petit souci avec du code:
 
#include <iostream.h>
 
int main ()
{
 
int rec;
 
a:
 
cout << " choix de la commande " << endl;
cout << "1: - SawmillCL.exe -p "Sawmill - MTL - eSafe" -a bd -" << endl;
cout << "2: - SawmillCL.exe -p "Sawmill - MTL - eSafe" -a rp -" << endl;
 
cin >> rec;
 
switch (rec)
{
 
case 1:
     
     system("\"C:\\Program Files (x86)\\Sawmill\\SawmillCL.exe -p \"Sawmill - MTL - eSafe\" -a bd\"" );
     break;
       
case 2:
     
     system("\"C:\\Program Files (x86)\\Sawmill\\SawmillCL.exe -p \"Sawmill - MTL - eSafe\" -a rp\"" );
     break;
 
 
     
default:
         
        goto a;
       
}
 
//system("ping 192.168.1.1" );
 
system("pause" );
 
}
 
en fait mon probleme est d'arriver à gerer les espaces dans la commande à passer
 
 
le chemin a la base est " c:\Program Files (x86)\Sawmill\SawmillCL.exe "
 
voici l'erreur:
 
'C:\Program' is not recognized as an internal or external command,
operable program or batch file.
Press any key to continue . . .
 
en fait meme en testant avec un .exe daffichage dos à la place de SawmillCL.exe cela me fait une erreur egalement
 
merci

mood
Publicité
Posté le 12-09-2007 à 13:39:34  profilanswer
 

n°1611126
Dumbledore
Posté le 12-09-2007 à 17:28:11  profilanswer
 

argh ! un goto dans un programme C++ !
 
Sinon, tente en mettant un "\" devant ton espace

n°1611180
eX-
Posté le 12-09-2007 à 19:46:38  profilanswer
 

j'ai testé cest pareil Dumbledore,
 
en fait il faudrai que je trouve toutes les fonctions et leur synthax et leur utilisation, je googleliz..
 
 
"
argh ! un goto dans un programme C++ !"
 
pourquoi cest pas bien les goto :/


Message édité par eX- le 12-09-2007 à 19:50:22
n°1611195
Dumbledore
Posté le 12-09-2007 à 21:18:06  profilanswer
 

ça gêne à la lisibilité du programme. C'est à utiliser de manière vraiment parcimonieuse quand t'as vraiment pas le choix et là, en l'occurrence, avec un while, c'est très facile à éviter


Message édité par Dumbledore le 12-09-2007 à 21:20:23
n°1611219
eX-
Posté le 13-09-2007 à 08:16:26  profilanswer
 

oui mais en général je vais au plus rapide...

n°1611237
Joel F
Real men use unique_ptr
Posté le 13-09-2007 à 09:24:01  profilanswer
 

en général tu vas au casse pipe :o
 
les goto y a genre 0.1 vrai raison de l'utiliser. En 10 ans d'XP j'en ai vu un une fois utilisé alors qu'on pouvait rien faire d'autre.  
 
Autant le break en terminaison prématurée de boucle ok, autant le goto ... ca démontre une méconnaissance assez crasse du langage.
 
Faut voir que bon, ca fait chier le compilo car ca lui brise son flot de controle, ca l'empeche d'optimsier des trucs etc ...
 
Bref :
 
Each time you sue a goto, god kills a kitten.
Please, think of the Kitten

 
:o

n°1611283
eX-
Posté le 13-09-2007 à 11:16:08  profilanswer
 

ouais p-e bien Joel F moi je vois pas de problemes :)

n°1611285
Joel F
Real men use unique_ptr
Posté le 13-09-2007 à 11:23:16  profilanswer
 

ok, on en reparle dans qqs années ;)

n°1611399
ptitchep
Posté le 13-09-2007 à 15:35:27  profilanswer
 

Code :
  1. #include <iostream>
  2. int main ()
  3. {
  4. int rec=0;
  5. while (rec!=1 && rec!=2)
  6. {
  7.     cout << " choix de la commande " << endl;
  8.     cout << "1: - SawmillCL.exe -p "Sawmill - MTL - eSafe" -a bd -" << endl;
  9.     cout << "2: - SawmillCL.exe -p "Sawmill - MTL - eSafe" -a rp -" << endl;
  10.     cin >> rec;
  11. }
  12. if (rec==1)
  13.      system("\"C:\\Program\\ Files\\ (x86)\\Sawmill\\SawmillCL.exe -p \"Sawmill - MTL - eSafe\" -a bd\"" );
  14. else
  15.      system("\"C:\\Program\\ Files\\ (x86)\\Sawmill\\SawmillCL.exe -p \"Sawmill - MTL - eSafe\" -a rp\"" );
  16. //system("ping 192.168.1.1" );
  17. system("pause" );
  18. return 0;
  19. }


 
Ca fonctionne avec deux \ devant l'espace (en tout cas sous linux).
la commande passé au systeme devient C:\Program\ Files\ (x86)\Sawmill ... donc l'espace est protégé et le systeme trouve le fichier.
ex:
system("\"C:\\Program\\ Files\\ (x86)\\Sawmill\\SawmillCL.exe\"" );
 
edit: en voyant le resultat en grand, je me rends compte que \ ne peut pas être le caractère qui protège l'espace puisqu'il délimite l'arborescence sous windows. Peut être / alors...


Message édité par ptitchep le 13-09-2007 à 15:41:23

---------------
deluser --remove-home ptitchep
n°1611410
ptitchep
Posté le 13-09-2007 à 16:04:30  profilanswer
 

En fait sous windows chez moi ceci fonctionne parfaitement:
 

Code :
  1. int main()
  2. {
  3.     system("\"c:\\Program Files\\Hamachi\\hamachi.exe\"" );
  4.     system("pause" );
  5.     return 0;
  6. }


 
 :??: ...
 
Si ton programme ne fait que ça, c'est peut-être plus simple de faire un script, au moins c'est adapté.

Message cité 1 fois
Message édité par ptitchep le 13-09-2007 à 16:09:25

---------------
deluser --remove-home ptitchep
mood
Publicité
Posté le 13-09-2007 à 16:04:30  profilanswer
 

n°1611806
joneal
Posté le 14-09-2007 à 21:06:33  profilanswer
 

autre solution :
 
"c:\\progra~1\\..."

n°1611889
Ace17
Posté le 15-09-2007 à 14:08:11  profilanswer
 

eX- a écrit :

ouais p-e bien Joel F moi je vois pas de problemes :)


Parce qu'il faut un minimum d'experience pour le voir, ce probleme.
http://en.wikipedia.org/wiki/GOTO# [...] goto_usage

n°1612399
eX-
Posté le 17-09-2007 à 20:01:51  profilanswer
 

Ace17 a écrit :


Parce qu'il faut un minimum d'experience pour le voir, ce probleme.
http://en.wikipedia.org/wiki/GOTO# [...] goto_usage


 
 
peut etre Ace17 mais tant que ca satisfait, mes applis, mes clients, et mes collègues ,
je ne vois pas de problèmes à utiliser goto.
 
Merci quand meme

Message cité 2 fois
Message édité par eX- le 17-09-2007 à 20:04:19
n°1612401
ptitchep
Posté le 17-09-2007 à 20:05:13  profilanswer
 

oui ms si un jour un collègue doit reprendre un de tes projets, il va mettre 10 fois plus de temps pour comprendre ce que tu as fait par rapport à un code propre.
 
edit: ortograf


Message édité par ptitchep le 17-09-2007 à 20:05:56

---------------
deluser --remove-home ptitchep
n°1612412
Joel F
Real men use unique_ptr
Posté le 17-09-2007 à 20:35:57  profilanswer
 

eX- a écrit :


peut etre Ace17 mais tant que ca satisfait, mes applis, mes clients, et mes collègues ,
je ne vois pas de problèmes à utiliser goto.


 
Parce que en plus, tu travail comme ça  :ouch:  
c'ets quoi ta boite ? j'espere que c'ets aps Dassault System ou un truc de gestion de centrale  :o

n°1612468
Ace17
Posté le 18-09-2007 à 00:08:26  profilanswer
 

eX- a écrit :


peut etre Ace17 mais tant que ca satisfait, mes applis, mes clients, et mes collègues ,
je ne vois pas de problèmes à utiliser goto.


Precisemment. Tu ne le vois pas, mais c'est juste parce que tu ne regardes pas assez loin. Cela te fait considerer ton programme comme un produit fini, c'est a dire comme une chose a laquelle tu n'effectueras plus de corrections. Le goto augmente ta probabilite de faire des erreurs lorsque tu modifieras ton programme par la suite, c'est aussi simple que ca.

Message cité 1 fois
Message édité par Ace17 le 18-09-2007 à 00:08:49
n°1612532
ptitchep
Posté le 18-09-2007 à 11:20:35  profilanswer
 

En tout cas je me demande où tu as appris à utiliser goto.
Mon père a fait un IUT informatique dans les années 70 et c'était déjà formellement interdit. Je n'ai jamais vu le moindre prof ni le moindre bouquin parler du goto sinon pour dire de ne pas l'utiliser.
A part en assembleur, je n'ai jamais utilisé directement un jump.


---------------
deluser --remove-home ptitchep
n°1612683
eX-
Posté le 18-09-2007 à 17:03:41  profilanswer
 

Ace17 a écrit :


Precisemment. Tu ne le vois pas, mais c'est juste parce que tu ne regardes pas assez loin. Cela te fait considerer ton programme comme un produit fini, c'est a dire comme une chose a laquelle tu n'effectueras plus de corrections. Le goto augmente ta probabilite de faire des erreurs lorsque tu modifieras ton programme par la suite, c'est aussi simple que ca.


 
voila cest deja plus precis comme explication, mais si mes collegues sont intelligents, il n'y a pas de problemes, et on s'en sert pas souvent.
toute facon je n'ai pas a justifier d'une quelconque utilisation de goto etant donné que le coeur du probleme ce situe autre pars.
 
ensuite:
 

ptitchep a écrit :

En tout cas je me demande où tu as appris à utiliser goto.
Mon père a fait un IUT informatique dans les années 70 et c'était déjà formellement interdit. Je n'ai jamais vu le moindre prof ni le moindre bouquin parler du goto sinon pour dire de ne pas l'utiliser.
A part en assembleur, je n'ai jamais utilisé directement un jump.


 
merci de nous raconter la vie de ton popa, mais tu ne repond malheuresement qu'a la polémique du goto et non le probleme initial,à savoir comment gerer les espaces avec la fonction system('') en c++.
 
Merci à vous

Message cité 1 fois
Message édité par eX- le 18-09-2007 à 17:04:32
n°1612690
ptitchep
Posté le 18-09-2007 à 17:09:27  profilanswer
 

eX- a écrit :


merci de nous raconter la vie de ton popa, mais tu ne repond malheuresement qu'a la polémique du goto et non le probleme initial,à savoir comment gerer les espaces avec la fonction system('') en c++.
Merci à vous


 
lol
mais j'ai déjà écrit ça:
 

ptitchep a écrit :

En fait sous windows chez moi ceci fonctionne parfaitement:
 

Code :
  1. int main()
  2. {
  3.     system("\"c:\\Program Files\\Hamachi\\hamachi.exe\"" );
  4.     system("pause" );
  5.     return 0;
  6. }


 
 :??: ...
 
Si ton programme ne fait que ça, c'est peut-être plus simple de faire un script, au moins c'est adapté.


 
Comme tu le vois j'ai un espace moi aussi et pourtant mon executable est lancé sans problème. Tu es bien sûr de tes guillemets? J'ai windows XP et je ne pense pas que le fonctionnement de system() varie d'un pc à l'autre.


---------------
deluser --remove-home ptitchep
n°1613558
eX-
Posté le 20-09-2007 à 18:09:26  profilanswer
 

ptitchep a écrit :


 
lol
mais j'ai déjà écrit ça:
 


 

ptitchep a écrit :


 
Comme tu le vois j'ai un espace moi aussi et pourtant mon executable est lancé sans problème. Tu es bien sûr de tes guillemets? J'ai windows XP et je ne pense pas que le fonctionnement de system() varie d'un pc à l'autre.


 
 
ok pour tester @home avc un nmap par exemple sur f:\n map\nmap.exe
 
#include <iostream.h>
 
 
int main()
{
     
system("\"f:\\n map\\nmap.exe\"" );
system("pause" );
return 0;    
}
 
cela passe merci pour ta contribution ptitchep.
 
Ma question initiale etait de savoir gerer les espaces sur la fonction system("chemin path" ) pour ca cest ok.
 
maintenant comme tu doit le savoir par exemple pour nmap il attend des arguments.
 
ma question est maintenant de savoir comment passer des arguments avc la fonction system("" ) tout en gerant deja les espaces blancs (f:\n...map\.)
 
à savoir  
 
system("\"f:\n map\nmap.exe\"" );
ca le lauch simplement
 
 avec par exemple -P0 ou meme plusieurs: nmap -P0 host
                                                         nmap -v -A scanme.nmap.org /and co...
 
Merci à vous

n°1613564
Ace17
Posté le 20-09-2007 à 18:30:58  profilanswer
 

Et system("\"f:\n map\nmap.exe\" \"argument 1\" arg2" ) ca marche pas?

n°1613571
Joel F
Real men use unique_ptr
Posté le 20-09-2007 à 19:01:53  profilanswer
 

bah system attends une bete chaine. Donc tu construis ta chaine de commande via ostringstream et tu lui balance le str().

n°1836728
beuleuppeu​p
Posté le 12-01-2009 à 04:55:32  profilanswer
 

Bonjour,
 
Je suis un peu dans la même situation, sauf que je récupère la chaine dans une variable via une CFileDialog. Du coup je ne peux pas savoir à l'avance s'il y aura un espace ou pas, et si l'utilisateur pioche dans un dossier à la "Documents and Settings" ça ne marche donc pas.
 

Code :
  1. if(dial.DoModal()==IDOK)
  2. {
  3.  CString pathname=dial.GetPathName();
  4.  string path=pathname;
  5.  system(path.c_str());
  6. }


 
Merci d'avance.

n°1836737
Joel F
Real men use unique_ptr
Posté le 12-01-2009 à 08:12:03  profilanswer
 

bah faut ecrire une chtite fonction qui parse la chaine est ajoute ce qui faut. avec boost::strings ca devrait aller

n°1836742
beuleuppeu​p
Posté le 12-01-2009 à 08:48:59  profilanswer
 

Hum oui en effet, j'ai juste pas réfléchit.
Il m'a juste suffit de concaténer un " au début et à la fin de ma variable. Ce qui n'est pas très dur avec un std::string ^^.

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  C++ commandes system("..") windows

 

Sujets relatifs
Awk sous windows (cygwin)Message Windows
Créer un service windows en c++pop-up flash sans fenetre windows
Gawk : quote refusé sous WindowsCapitaliser la sélection (environnement Windows)
portage d'un driver windows en qnx besoin d'aide urgentAperçu des images et photocopies Windows
compilation sous vista 64 d'un exe pour windows XPportabilité Linux<->Windows : séparateur des chemins de fichiers
Plus de sujets relatifs à : C++ commandes system("..") windows


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR