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

Execution de spawn: je comprends rien


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Par défaut Execution de spawn: je comprends rien
    Bonjour,

    j'aimerais exécuter la commande suivante en C++ en utilisant une des commandes spawn:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "C:\program files\Winrar\rar.exe" a -ep "C:\Mon Home\Fichier.txt.rar" "C:\Mon Home\Fichier.txt"
    Rien a faire, ca ne passe pas. Quelqu'un pourrait-il m'expliquer comment correctement formater les arguments passés a spawn (en plus lequel utiliser, spawnl, spawnv,...?)

    Si quelqu'un a une autre solution... (ça n'a pourtant pas l'air compliqué!!!!)

    Merci d'avance. G. TREIZE.

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Voici un exemple d'utilisation de spawn (spawnvp) : http://c.developpez.com/faq/?page=pr...ROCESSUS_creer.
    Et voici la doc de référence : http://msdn.microsoft.com/en-us/libr...d2(VS.71).aspx.
    Vu que t'es sous Windows, préfère CreateProcess ou ShellExecute à spawn.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Par défaut
    Salut, merci pour la réponse... cependant, ça ne m'aide pas beaucoup plus (je sais je suis pas une flèche, mais bon...)

    Plus concrètement, voici mon code qui ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    	char *arg[5];
    	arg[0] = "a";
    	arg[1] = "-ep";
    	arg[2] = "\"C:\\Mon Home\\Fichier.txt.rar\"";
    	arg[3] = "\"C:\\Mon Home\\Fichier.txt\"";
    	arg[4] = NULL;
    	prog = "C:\\Program Files\\WinRAR\\rar.exe";
     
    	spawnvp(_P_NOWAIT,prog,arg);
    Avec ce code, j'ai l'impression qu'il exécute bien rar.exe (une fenêtre dos s'ouvre bien), mais qu'il ne prend pas en compte les arguments (il y a un défilement de texte qui, je pense, est comme si je tapais "rar.exe" tout seul sans arguments - autrement dit il m'affiche le "help" de rar).

    Donc il y a un problème au passage des arguments (c'est surement immédiat mais je bloque).

    Où est le problème?

    Merci. Gorgo T.

  4. #4
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Un "arg" doit toujours être une chaîne sans espace. Tu t'en sortiras plus facilement avec ShellExecute (windows.h), comme je te l'ai déjà dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ShellExecute(NULL,
        "open",
        "C:\\Program Files\\WinRAR\\rar.exe",
        "a -ep \"C:\\Mon Home\\Fichier.txt.rar\" \"C:\\Mon Home\\Fichier.txt\"",
        NULL,
        SW_SHOWNORMAL
    );
    ShellExecute est un "remplacement" simple à _spwan(_P_NOWAIT). Si tu veux un remplacement simple pour _spawn(_P_WAIT), tu as la fonction system (stdlib.h).

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 157
    Par défaut
    Voila, j'ai resolu mon probleme avec le code suivant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    CString Arg;
    Arg.Format("a -ep \"%s.rar\"\"%s\"",PrevMainLogFilename,PrevMainLogFilename);
     
    spawnl(_P_WAIT,
    	"C:\\Program Files\\WinRAR\\rar.exe", 
    	"\"C:\\Program Files\\WinRAR\\rar.exe\"",
    	Arg,
    	0
    	);
    Ca reste TRES mysterieux pour moi la raison pour laquelle on doit mettre des guillements sur le second argument et pas sur le premier...

    Donc je mets pas le topic "resolu" pour l'instant... si quelqu'un peut m'expliquer...

    G.T.

  6. #6
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Parce que le premier argument (qui est en fait le deuxième argument de spawn) est le nom de l'exécutable qu'on veut lancer et le reste les arguments de la ligne de commande. Le nom d'un fichier peut comporter des espaces, et comme ici on lui donne tout seul, pas besoin de guillemets supplémentaires. Par contre, l'espace est un séparateur d'arguments donc si un argument doit contenir un espace, il faut mettre le tout entre guillemets.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. TIdCmdTCPServer ! J'y comprend rien
    Par flash_math dans le forum Delphi
    Réponses: 1
    Dernier message: 07/07/2006, 18h28
  2. Mise en forme de texte, IE ne comprend rien
    Par Sunsawe dans le forum Balisage (X)HTML et validation W3C
    Réponses: 13
    Dernier message: 11/06/2006, 21h17
  3. Positionnement CSS, j'comprends rien !!
    Par guano dans le forum Mise en page CSS
    Réponses: 10
    Dernier message: 16/01/2006, 16h40
  4. error : does not name a type // je n'y comprends rien
    Par djobanaille dans le forum C++
    Réponses: 6
    Dernier message: 19/11/2005, 10h25
  5. [MX]boutons...j'y met du mien mais j'comprend rien!
    Par skapull dans le forum Flash
    Réponses: 5
    Dernier message: 25/03/2004, 18h55

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