WinExec et temps d'exécution d'une commande dos

cs_maxidoh Messages postés 4 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 31 octobre 2009 - 13 août 2008 à 23:52
cs_maxidoh Messages postés 4 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 31 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);

2 réponses

SebLinck Messages postés 212 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 23 juin 2011
14 août 2008 à 09:33
Salut,
tu veux dire quoi par :"WinExec  me donne les résultats du chargement précédent"?

Cordialement,
Sébastien.
0
cs_maxidoh Messages postés 4 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 31 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?
0
Rejoignez-nous