C++

Fermé
Yvan64320 Messages postés 33 Date d'inscription jeudi 28 juillet 2011 Statut Membre Dernière intervention 25 août 2011 - 5 août 2011 à 10:56
Yvan64320 Messages postés 33 Date d'inscription jeudi 28 juillet 2011 Statut Membre Dernière intervention 25 août 2011 - 5 août 2011 à 16:15
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:

 #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

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
5 août 2011 à 11:56
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.
0
Yvan64320 Messages postés 33 Date d'inscription jeudi 28 juillet 2011 Statut Membre Dernière intervention 25 août 2011
5 août 2011 à 12:05
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.
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
5 août 2011 à 13:58
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.
0
Yvan64320 Messages postés 33 Date d'inscription jeudi 28 juillet 2011 Statut Membre Dernière intervention 25 août 2011
5 août 2011 à 14:13
Le fichier test.txt est modifié à la main si quelqu'un souhaite rajouter un fichier avec son chemin d'accès.
que veux tu dire par: comment comptes tu arrêter ton premier programme ?(system("Pause")) .??
Merci pour ces conseils.
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
Modifié par Char Snipeur le 5/08/2011 à 15:34
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.
0
Yvan64320 Messages postés 33 Date d'inscription jeudi 28 juillet 2011 Statut Membre Dernière intervention 25 août 2011
5 août 2011 à 15:41
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.
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
5 août 2011 à 15:59
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 :
#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);
0
Yvan64320 Messages postés 33 Date d'inscription jeudi 28 juillet 2011 Statut Membre Dernière intervention 25 août 2011
5 août 2011 à 16:15
Ok, je suis entrain d'étudier ton code, j'ai quelques erreurs qui apparaissent j'essaye de régler cela.
Merci encore pour ton aide.
0