[C]/[C++] Execution d'une commande externe
wAx
Messages postés
1596
Date d'inscription
Statut
Membre
Dernière intervention
-
dwyane346 Messages postés 147 Date d'inscription Statut Membre Dernière intervention -
dwyane346 Messages postés 147 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous
Je cherche à lancer une commande externe à partir d'un programme c/c++.
La commande system serait parfaite si ce n'est qu'elle s'execute directement dans la console où je lance mon programme. Je m'explique:
Si dans mon programme je fais
L'excution du dir s'affiche en plein milieu de l'execution de mon programme et me parasite l'affichage
Ce que j'aimerais, ça serait de pouvoir faire un truc du genre:
Que le dir n'apparaisse pas et que je puisse le reccuperer pour le traiter dans mystring
Merci pour vos idées
Je cherche à lancer une commande externe à partir d'un programme c/c++.
La commande system serait parfaite si ce n'est qu'elle s'execute directement dans la console où je lance mon programme. Je m'explique:
Si dans mon programme je fais
system("dir c:\");
L'excution du dir s'affiche en plein milieu de l'execution de mon programme et me parasite l'affichage
Ce que j'aimerais, ça serait de pouvoir faire un truc du genre:
mystring=system("dir");
Que le dir n'apparaisse pas et que je puisse le reccuperer pour le traiter dans mystring
Merci pour vos idées
A voir également:
- [C]/[C++] Execution d'une commande externe
- Invite de commande - Guide
- Chkdsk disque dur externe - Guide
- Commande terminal mac - Guide
- Commande dism - Guide
- Diskpart commande - Guide
7 réponses
Sisi, sous windows ça fonctionne
"dir > fichier.txt"
Et apres j'ouvre le fichier
Sinon, autre piste:
N'y a t'il pas moyen de rediriger le flux stdout non pas vers un fichier mais vers un autre flux ouvert pour le traiter directement ??
"dir > fichier.txt"
Et apres j'ouvre le fichier
Sinon, autre piste:
N'y a t'il pas moyen de rediriger le flux stdout non pas vers un fichier mais vers un autre flux ouvert pour le traiter directement ??
Salut,
Il vaut mieux éviter la fonction system.
Sous Windows, tu peux utiliser les API Win32.
Tu initialises le répertoire FindFirstFile() et tu utilises une boucle sur FindNextFile(). Et pour fermer tu utilises FindClose().
https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-findfirstfilea?redirectedfrom=MSDN
https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-findnextfilea?redirectedfrom=MSDN
https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-findclose?redirectedfrom=MSDN
Avec l'argument de type WIN32_FIND_DATA qui est une structure, tu trouveras facilement le nom du fichier à chaque itération en pointant sur cFileName.
Si tu veux un petit exemple, n'hésite pas à demander.
Cdlt,
Il vaut mieux éviter la fonction system.
Sous Windows, tu peux utiliser les API Win32.
Tu initialises le répertoire FindFirstFile() et tu utilises une boucle sur FindNextFile(). Et pour fermer tu utilises FindClose().
https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-findfirstfilea?redirectedfrom=MSDN
https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-findnextfilea?redirectedfrom=MSDN
https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-findclose?redirectedfrom=MSDN
Avec l'argument de type WIN32_FIND_DATA qui est une structure, tu trouveras facilement le nom du fichier à chaque itération en pointant sur cFileName.
Si tu veux un petit exemple, n'hésite pas à demander.
Cdlt,
Salut wAx,
solution qui fonctionne sur Borland builder et Visual :
/* lance l'explorateur Windows */
ShellExecute ( NULL,"explore",".\\",NULL,NULL,SW_NORMAL);
/* ouvre le document */
ShellExecute
{NULL,"open","lisezmoi.htm",NULL,NULL,SW_NORMAL);
/* ouvre le repertoire contenant la documentation */
ShellExecute ( NULL,"open",".\\Docs",NULL,NULL,SW_NORMAL);
Voici quelques exemples ...
A+
Debout les crabes, la mer monte !
solution qui fonctionne sur Borland builder et Visual :
/* lance l'explorateur Windows */
ShellExecute ( NULL,"explore",".\\",NULL,NULL,SW_NORMAL);
/* ouvre le document */
ShellExecute
{NULL,"open","lisezmoi.htm",NULL,NULL,SW_NORMAL);
/* ouvre le repertoire contenant la documentation */
ShellExecute ( NULL,"open",".\\Docs",NULL,NULL,SW_NORMAL);
Voici quelques exemples ...
A+
Debout les crabes, la mer monte !
Petite précision :
inclure :
/* header file pour "SHELL EXE" */
#include <ShellApi.h>
La c'est bon je pense ....
re - A++
Debout les crabes, la mer monte !
inclure :
/* header file pour "SHELL EXE" */
#include <ShellApi.h>
La c'est bon je pense ....
re - A++
Debout les crabes, la mer monte !
Vi mais je vois pas où je reccupere ce qui est renvoyé par la commande externe
Bien entendu mon exemple de fonctionne pas mais ce que j'essayais de montrer, c'etait de reccuperer la sortie de la commande externe dans une chaine pour pouvoir la traiter ensuite.
J'ai bien conscience que ceci ne peut s'appliquer qu'à des commandes console car sinon je ne vais rien reccuperer mais cela correspond tout à fait à ce dont j'ai besoin
Bien entendu mon exemple de fonctionne pas mais ce que j'essayais de montrer, c'etait de reccuperer la sortie de la commande externe dans une chaine pour pouvoir la traiter ensuite.
J'ai bien conscience que ceci ne peut s'appliquer qu'à des commandes console car sinon je ne vais rien reccuperer mais cela correspond tout à fait à ce dont j'ai besoin
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question