C++ Fermer l'execution d'un fichier.

C++ Fermer l'execution d'un fichier. - C++ - Programmation

Marsh Posté le 10-08-2011 à 17:42:47    

Bonjour,
Je suis nouveau sur ce site, et par la même occasion gros débutant en programmation.
J'ai essayé de faire (avec l'aide de forum/tuto) un petit programme en C++ je vous explique:
Le programme  a pour but de récupérer dans un fichier txt le chemin d'accès d'un fichier et de l'exécuter.
Il vérifie ensuite toute les 10 secondes si le fichier n'a pas changé et si il a changé il exécute le nouveau chemin d'accès du fichier.
Tout cela fonctionne, mais mon soucis c'est que je souhaite que lorsque le chemin d'accès dans mon fichier txt a changé il ferme le précèdent fichier et exécute le nouveau, pour le moment il exécute le nouveau mais garde le précédent ouvert.
 
Voici mon code au cas où:  
 

Code :
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. #include "windows.h"
  5. std::string enTete(const std::string &nomFichier)
  6. {
  7. std::ifstream fichier("D:\\test.txt" );
  8. std::string ligne;
  9. if (fichier.is_open())
  10. {
  11.  std::getline(fichier, ligne);
  12.  fichier.close();
  13.  std::cout << ligne.c_str() << std::endl;
  14. }
  15. else
  16. {
  17.  std::cerr << "Impossible d'ouvrir le fichier en lecture : " << nomFichier.c_str() << std::endl;
  18. }
  19. return ligne;
  20. }
  21. int main()
  22. {
  23. std::string ligne1, ligne2;
  24. while(true)
  25. {
  26.                 ligne1=enTete("D:\\test.txt" );
  27.  if(ligne2.compare(ligne1)!=0)
  28.  {
  29.      
  30.   system(ligne1.c_str());
  31.   ligne2=ligne1;
  32.  }
  33.          Sleep(10000);
  34. }
  35. }

Reply

Marsh Posté le 10-08-2011 à 17:42:47   

Reply

Marsh Posté le 11-08-2011 à 21:21:17    

Salut,
Sous Linux: fork/exec puis kill pour envoyer un signal au nouveau processus.
Sous Windows : quelque chose comme CreateProcess http://msdn.microsoft.com/en-us/li [...] 85%29.aspx qui doit te donner les infos nécessaires pour tuer ton processus fils j'imagine.

 

j'ai trouvé ça aussi: http://msdn.microsoft.com/en-us/li [...] 85%29.aspx

 

De tête je dirais qu'on peut faire if (ligne1 == ligne2) mais du devrais initialiser ligne2 avant de l'utiliser.


Message édité par ptitchep le 11-08-2011 à 21:31:38

---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 12-08-2011 à 18:00:45    

Ok merci j'ai regardé du côté des shellexecute , le seule problème c'est que j'arrive à exécuter un fichier avec son programme par défaut en mettant son chemin d'accès absolu, comme ceci dans les paramètres shellexecute:
 
ExecuteInfo.lpFile       = "D:\\Powerpoint_Losinger-Marazzi_F.ppt";
ExecuteInfo.lpParameters = 0;
 
 mais je sais pas comment faire en mettant la variable contenant les chemin d'accès des fichiers récupéré dans le fichier texte (par exemple: ligne1.c_str()) :x

Reply

Marsh Posté le 13-08-2011 à 15:08:04    

Squat64320 a écrit :

Ok merci j'ai regardé du côté des shellexecute , le seule problème c'est que j'arrive à exécuter un fichier avec son programme par défaut en mettant son chemin d'accès absolu, comme ceci dans les paramètres shellexecute:
 
ExecuteInfo.lpFile       = "D:\\Powerpoint_Losinger-Marazzi_F.ppt";
ExecuteInfo.lpParameters = 0;
 
 mais je sais pas comment faire en mettant la variable contenant les chemin d'accès des fichiers récupéré dans le fichier texte (par exemple: ligne1.c_str()) :x


Bonjour,
tu devrais donner plus de code mais au vu de ce que tu dis ca devrait être

Code :
  1. ExecuteInfo.lpFile       = ligne1.c_str();
  2. ExecuteInfo.lpParameters = 0;


?


---------------
Seul Google le sait...
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed