C++
Yvan64320
Messages postés
33
Date d'inscription
Statut
Membre
Dernière intervention
-
Yvan64320 Messages postés 33 Date d'inscription Statut Membre Dernière intervention -
Yvan64320 Messages postés 33 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je cherche à faire un programme qui va chercher dans un fichier texte le chemin d'accès d'un fichier et l'exécute. Pour cela j'ai ce code:
La chose que je n'arrive pas à faire c'est d'ajouter une condition if qui verifit si la ligne est toujours la même (donc si il n'y a pas un nouveau chemin d'accès dans le fichier texte) et que si la ligne est la même le fichier reste exécuter sinon on exécute la nouvelle ligne.
j'ai bien testé de faire un code pour cela mais celui-ci est un peu..... "foireux".
il me prend en compte le nouveau fichier que lorsque je reexécute mon programme, il ne le fait pas automatiquement lorsque je change et enregistre mon fichier texte.
Je suis débutant en C++ si quelqu'un pourrait m'expliquer comment faire, ou m'aiguiller cela serait sympa.
Merci d'avance.
Je cherche à faire un programme qui va chercher dans un fichier texte le chemin d'accès d'un fichier et l'exécute. Pour cela j'ai ce code:
#include <iostream> #include <fstream> #include <string> #include <cstdlib> using namespace std; int main() { ifstream fichier("D:\\test.txt"); if(fichier) { //L'ouverture s'est bien passée. On peut donc lire string ligne; //Une variable pour stocker les lignes lues (getline(fichier, ligne)); //Tant qu'on n'est pas a la fin, on lit, et on met dans la variable ligne le contenu de la ligne. { #ifdef WIN32 //Sous Windows system(ligne.c_str()); // execute le contenu de la variable ligne. #endif return EXIT_SUCCESS; } } else { cout << "ERREUR: Impossible d'ouvrir le fichier en lecture." << endl; } system("PAUSE");//mettre l'affichage de la console en pause pour pas qu'elle se referme automatiquement. return 0; }
La chose que je n'arrive pas à faire c'est d'ajouter une condition if qui verifit si la ligne est toujours la même (donc si il n'y a pas un nouveau chemin d'accès dans le fichier texte) et que si la ligne est la même le fichier reste exécuter sinon on exécute la nouvelle ligne.
j'ai bien testé de faire un code pour cela mais celui-ci est un peu..... "foireux".
#include <iostream> #include <fstream> #include <string> #include <cstdlib> using namespace std; int main() { ifstream fichier("D:\\test.txt"); if(fichier) { //L'ouverture s'est bien passée. On peut donc lire string ligne1; //Une variable pour stocker les lignes lues (getline(fichier, ligne1)); { #ifdef WIN32 //Sous Windows system(ligne1.c_str()); // execute le contenu de la variable ligne. #endif return EXIT_SUCCESS; } ifstream fichier("D:\\test.txt"); string ligne2; (getline(fichier, ligne2)); while(ligne1==ligne2) { #ifdef WIN32 //Sous Windows system(ligne1.c_str()); // execute le contenu de la variable ligne. #endif } if(ligne1!=ligne2) { #ifdef WIN32 //Sous Windows system(ligne2.c_str()); // execute le contenu de la variable ligne. #endif } } else { cout << "ERREUR: Impossible d'ouvrir le fichier en lecture." << endl; } system("PAUSE");//mettre l'affichage de la console en pause pour pas qu'elle se referme automatiquement. return 0; }
il me prend en compte le nouveau fichier que lorsque je reexécute mon programme, il ne le fait pas automatiquement lorsque je change et enregistre mon fichier texte.
Je suis débutant en C++ si quelqu'un pourrait m'expliquer comment faire, ou m'aiguiller cela serait sympa.
Merci d'avance.
4 réponses
Salut.
Je n'ai rien compris !
Je ne suis pas sur de ce que tu cherches à faire.
Tu as un fichier test.txt avec plusieurs lignes à exécuter. ça OK.
Après, tu parle de nouveau fichier, de mise à jour etc. Et là je suis perdu. C'est comme tes histoires de lignes 1 et 2.
Si ton but est de vérifier que dans test.txt il n'y a pas de doublon (deux fois le même exécutable) C'est faisable de manière assez simple. Sinon, essai d'être plus clair.
Je n'ai rien compris !
Je ne suis pas sur de ce que tu cherches à faire.
Tu as un fichier test.txt avec plusieurs lignes à exécuter. ça OK.
Après, tu parle de nouveau fichier, de mise à jour etc. Et là je suis perdu. C'est comme tes histoires de lignes 1 et 2.
Si ton but est de vérifier que dans test.txt il n'y a pas de doublon (deux fois le même exécutable) C'est faisable de manière assez simple. Sinon, essai d'être plus clair.
Alors je vais essayer d'être plus clair.
Donc ce que je veux faire exactement:
J'ai un fichier texte avec plusieurs lignes, mon programme doit récupérer que la première ligne dans une première variable (ligne1) et l'exécuter.
Ensuite je souhaiterais rajouter une condition, dans cette condition on récupère toujours la première ligne en variable (ligne2) et on compare si la première ligne du fichier texte est toujours la même(ligne1==ligne2), si c'est la même on continu à exécuter ce fichier, si elle a changée on stop l'exécution du fichier et on lance le nouveau fichier.
Je sais pas si c'est assez clair.. je l'espère.
Merci déjà de ta première réponse.
Donc ce que je veux faire exactement:
J'ai un fichier texte avec plusieurs lignes, mon programme doit récupérer que la première ligne dans une première variable (ligne1) et l'exécuter.
Ensuite je souhaiterais rajouter une condition, dans cette condition on récupère toujours la première ligne en variable (ligne2) et on compare si la première ligne du fichier texte est toujours la même(ligne1==ligne2), si c'est la même on continu à exécuter ce fichier, si elle a changée on stop l'exécution du fichier et on lance le nouveau fichier.
Je sais pas si c'est assez clair.. je l'espère.
Merci déjà de ta première réponse.
oui, c'est plus clair. Première chose, il faut fermer ton fichier entre les deux utilisations. Qu'est-ce qui va modifier le fichier test.txt ?
Comment comptes tu arrêter le premier programmes ?
System est une fonction standard, pas besoin de mettre #ifdef win32 devant.
Si tu veux faire du contrôle d'exécution, je te conseil plutôt d'utiliser les fonctions exec.
Tel que ton programme est fait, il va ouvrir le fichier, lancer le programme vérifier la modification ou non, et ne plus rien faire. à moins que ce soit le programme lancé qui modifie le fichier (et encore, ce n'est pas sur qu'il ait le temps) je ne pense pas que la différence ne soit jamais active.
Comment comptes tu arrêter le premier programmes ?
System est une fonction standard, pas besoin de mettre #ifdef win32 devant.
Si tu veux faire du contrôle d'exécution, je te conseil plutôt d'utiliser les fonctions exec.
Tel que ton programme est fait, il va ouvrir le fichier, lancer le programme vérifier la modification ou non, et ne plus rien faire. à moins que ce soit le programme lancé qui modifie le fichier (et encore, ce n'est pas sur qu'il ait le temps) je ne pense pas que la différence ne soit jamais active.
je parle du programme que tu lances avec system. Ou alors, je n'ai pas compris ce que tu veux dire par "on continue à exécuter le fichier".
Si tu le modifie à la main, il faut peut être mettre un temps d'attente suffisamment long entre les deux ouvertures de fichier. à moins que tu compte vérifier toutes les millisecondes qu'il n'a pas changer ? Après, sous windows, je crois que l'ouverture d'un fichier par un programme bloque sa modification par les autres.
Si tu le modifie à la main, il faut peut être mettre un temps d'attente suffisamment long entre les deux ouvertures de fichier. à moins que tu compte vérifier toutes les millisecondes qu'il n'a pas changer ? Après, sous windows, je crois que l'ouverture d'un fichier par un programme bloque sa modification par les autres.
Ok enfaite il faudrait vérifier toute les 5 minutes le fichier, mais il faudrait d'abord que je réussisse à faire un code correcte avant de m'attaquer à un timer ou quelque chose du genre.
d'accord pour le renseignement je vais vérifier si windows bloque ou pas la modification.
J'ai franchement du mal je suis désolé, j'ai la logique en langage algorithmique, mais pour le traduire en C++ c'est tout autre chose.
d'accord pour le renseignement je vais vérifier si windows bloque ou pas la modification.
J'ai franchement du mal je suis désolé, j'ai la logique en langage algorithmique, mais pour le traduire en C++ c'est tout autre chose.
si tu as du mal à passer de l'algo au C++, c'est que tu n'as pas été assez loin dans les tâches simple de ton algorithme.
En reprenant ce que tu as fait :
Je ferme le fichier, mais sinon, si tu veux "relire" du début il faut tout de même le "rembobiner" avec un seekg(0,ios::beg);
En reprenant ce que tu as fait :
#include <iostream> #include <fstream> #include <string> #include <cstdlib> using namespace std; int main() { ifstream fichier("D:\\test.txt"); string ligne1; //Une variable pour stocker les lignes lues if(fichier) { //L'ouverture s'est bien passée. On peut donc lire while(getline(fichier, ligne1)); { system(ligne1.c_str()); // execute le contenu de la variable ligne. } fichier.close(); } else { cout << "ERREUR: Impossible d'ouvrir le fichier en lecture." << endl; return 1; } system("pause"); string ligne2=ligne1; while(ligne1==ligne2) { fichier.open("d:\\test.txt"); getline(fichier,ligne2); system(ligne1.c_str()); // execute le contenu de la variable ligne. fichier.close(); } if(ligne1!=ligne2) { system(ligne2.c_str()); // execute le contenu de la variable ligne. } } system("PAUSE");//mettre l'affichage de la console en pause pour pas qu'elle se referme automatiquement. return 0; }
Je ferme le fichier, mais sinon, si tu veux "relire" du début il faut tout de même le "rembobiner" avec un seekg(0,ios::beg);