cs_maxidoh
Messages postés4Date d'inscriptionvendredi 13 juin 2008StatutMembreDernière intervention31 octobre 2009
-
13 août 2008 à 23:52
cs_maxidoh
Messages postés4Date d'inscriptionvendredi 13 juin 2008StatutMembreDernière intervention31 octobre 2009
-
14 août 2008 à 21:38
Bonsoir,je fais un programme sous Borland C++ Builder qui va lancer des requêtes ping et traceroute sous windows.Je lance l'exécution des ping et traceroute d'un fichier bat dont je recueille les résultats dans un fichier texte sur lequel je travaille(Je compte le nombre de sauts).Pour que la fenêtre dos n'apparaisse pas,j'utilise WinExec("commande",0).Et le problème c'est que WinExec me donne les résultats du chargement précédent du fichier alors que le fichier se charge encore pour la commande nouvellement lancée.Comment faire pour avoir les résultats en temps réel? Voici mon code:
FILE * stream;
stream=fopen("ping2.BAT","w"); //ouverture du fichier en écriture
char a[10]={'t','r','a','c','e','r','t',' '}; //declaration d'un tableau statique pour la commande ping
//char b[255]={NULL};// declaration d'un tableau tableau dynamique
char * b = new char[ Edit1->Text.Length() + 1 ];
strcpy( b, Edit1->Text.c_str() );
fflush(stdin);// vidage du buffer
char c[255]={NULL}; //déclaration d'un 3ème tableau pour la concaténation
strcpy (c,a); //copie du tableau a dans le c
strcat (c,b); // concatenation du tableau b avec le c
fputs(c,stream); // copie du tableau c dans le fichier ping2.bat
rewind(stream);
fclose(stream); // fermeture du fichier
WinExec("ping2.bat",0);
WinExec("ping2.BAT > ping2.txt",0);
int n=0;//nombre de sauts
int m=0,e=0,tmp=0,bol=0; //respectivement nombre de sauts après étoile et nombre de tois étoiles
char d; //caractère actuel
FILE * stream2;
stream2=fopen("ping2.txt","r+");
while ((d=fgetc(stream2))!= EOF)
{
if ((d>'a'&& d<='z')||(d>'A'&& d<='Z'))
{
n+=0;
while((d=fgetc(stream2))!='\n')
n+=0;
}
else if (d>'0'&& d<='9')
{
n++;
m++;
while((d=fgetc(stream2))!='\n')
{
//n+=0; }
if(d=='*')
{
if(bol==0)
{
m=0; //Ce qui me permet de compter le nombre de sauts après étoile
bol=1;
}
tmp++;
}
if(tmp==3)
{
e++;
tmp=0;
}
}
}
if(n==3 && (d =='I')){n=0;break;} //dans le cas où il n'y a pas de connexion
}
fclose(stream2);
Edit2->Text=IntToStr(n);
Edit5->Text=IntToStr(n);
Edit3->Text=IntToStr(m);
Edit4->Text=IntToStr(e);
cs_maxidoh
Messages postés4Date d'inscriptionvendredi 13 juin 2008StatutMembreDernière intervention31 octobre 2009 14 août 2008 à 21:38
Lorsque j'exécute le programme pour une première fois,WinExec s'exécute et le nombre de sauts vaut 0 puisqu'il n'y a rien dans le fichier texte.Pendant ce temps dans le répertoire où il y a le programme,le fichier texte se charge encore et le résultat qu'il donne après avoir fini son chargement n'est pas concordant(par exemple je compte 10 sauts dans le fichier texte) .Une deuxième fois quand je lance le programme,Il s'affiche automatiquement 10 comme nombre de sauts qui correspond à ce
qu'il y a dans le fichier texte issue de la commande de
redirection alors que le fichier se recharge encore pour donner finalement un autre résultat.Comment est-ce que je dois faire pour que le programme me donne le résultat en même temps que le fichier texte issue de la redirection(WinExec("ping2.bat>ping2.txt",0)) ait fini de s'exécuter?