Compatibilite de fichiers

Signaler
Messages postés
11
Date d'inscription
dimanche 6 juillet 2003
Statut
Membre
Dernière intervention
29 mars 2004
-
Messages postés
11
Date d'inscription
dimanche 6 juillet 2003
Statut
Membre
Dernière intervention
29 mars 2004
-
Salut je voudrai lancer un exe dans mon pg et cet exe doit recevoir des parametres quelqu'un sait comment je peux faire ??
je precise un peu:
il s'agit de transformer des fichiers textes cree sous windows pour que mon exec qui tourne sous unix puisse les traiter (en fait c'est pour les rendre compatible) le nom du pg que j'utilise pour faire cela est fromdos et il doit recevoir en parametre le fichier a transformer puis mon programme fait le traitement
de plus je dois pouvoir le faire plusieurs fois car je traite plusieurs fichiers et donc avant de faire quoi que ce soit je dois etre sur que mes fichiers seront lisible correctement (notament avec un marqueur de fin de ligne qui sera reconnu)

6 réponses

Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

En Win32, il y a CreateProcess() mais pour une compatibilité Unix/Win regarde du côté de system() ou exec().

Kaid - kaid.fr.st
Messages postés
11
Date d'inscription
dimanche 6 juillet 2003
Statut
Membre
Dernière intervention
29 mars 2004

j' ai deja vu ces commandes mais comment je peux lui passer les arguments necessaire qui d'ailleurs se trouve dans un vector
est ce que je peux faire qqch du type:
for (int i=0; i<vec.size();i++)
system("nompg vec[i]");
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

Il faut tester mais ce que tu veux faire devrait marcher. Mais si tu veux passer tous les éléments du vecteur comme paramètres à ton programme tu ne peux pas faire comme ca. Utilise une string dans laquelle tu mets le nom du programme puis tous les paramètres provenants du vecteur (sans oublier les espaces pour les séparer).

Sinon il est peut-être plus rapide d'utiliser execv().


// Ton tableau de paramètres
std::vector<std::string> tabParam;

// Le tableau que l'on va passer à execv
const char** tabParamExecv=new char* [(tabParam.size() + 1) * sizeof(const char*)];

// Recopie des valeurs
int i=0;
for(std::vector<std::string>::iterator it=tabParam.begin();it!=tabParam.end();it++)
tabParamExecv[i++]=(*it).c_str();

// Ajout du NULL qui détermine la fin du tableau
tabParamExecv[i]=NULL;

// Appel de execv
execv(STR_CMDNAME, tabParamExecv);



Code non testé donc pas forcément juste.

Kaid - kaid.fr.st
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

J'ai oublié le delete du tableau tabParamExecv.

Kaid - kaid.fr.st
Messages postés
221
Date d'inscription
mardi 12 août 2003
Statut
Membre
Dernière intervention
11 décembre 2008
1
J'ai déja eu l'occasion (sauf que la source est introuvable dans mon fouilli) d'utiliser system() et comme l'a dit Kaid, utilise un tableau contenant le nom de l'exe,et le paramètre.
Un exemple avec Bloc note :

char ordre[25];
strcpy(ordre,"Notepad");
strcat(ordre," readme.txt");//attention a ne pas oublier l'espace de readme.txt
system(ordre);

et ça marche du tonner. Il te reste à adapter pour les arguments de ton tableau mais je te fais confiance...
a+
Messages postés
11
Date d'inscription
dimanche 6 juillet 2003
Statut
Membre
Dernière intervention
29 mars 2004

Merci à tous, je test et je vous tiens au courant ;-)