Salut à tous.
Après pas mal de recherche je n'ai pas à réussi à trouver de réponse.
je suis confronter au problème suivant :
je veux effectue la recherche sur un répertoire donc je vais faire cette recherche dans une boucle (pour la clarté du code je ramène le problème à 2 fichiers et je mets toutes les données en dur)
lorsque je tente de fermer le fichier ouvert par ifstream.open(...) j'ai une erreur il ne le ferme pas par le close() et lorsque je tente dans ouvrir un deuxième après et ben forcément il ne peut pas puisque le premier n'est pas fermer...
voilà le code :
#include <stdio.h> #include <iostream> #include <string> #include <fstream> using namespace std;
#include <io.h> //_findfirst routines (system calls)
class schClass { std::ifstream infs; public: std::string fichier ; //le nom du fichier où faire la recherche std::string chemin ; //le chemin du fichier std::string chaine_Rech ; //la chaine à rechercher
int rech_Chaine(); //méthode de recherche d'une chaine dans le fichier, renvoie le nombre d'occurences de la chaine dans le fichier };
int schClass::rech_Chaine() { std::string tmp ; //chaine temporaire de travail unsigned int i = 0 ; char c ; unsigned int nbtrouve = 0 ; //on affecte le chemin exact du fichier dans la variable tmp if((chemin.length()-1) == '\\') tmp = chemin + fichier ; else tmp = chemin + "\\" + fichier ; //on ouvre le fichier et on test si OK infs.open(tmp.data()) ; if(!infs) { std::cout << "Erreur ouverture de : <" << fichier << ">\n" ; return false ; } else std::cout << "ouverture OK de : <" << fichier << ">\n" ; //boucle de parcours du fichier caractère par caractère while((c=infs.get()) != EOF ) { if(c == chaine_Rech[i]) i++; else i = 0;
if(i == chaine_Rech.length()) { nbtrouve++; i=0; } }
//on ferme le fichier et on test si OK infs.close(); if(!infs) { std::cout << "Erreur fermeture de : <" << fichier << ">\n" ; return false ; }
//on retourne le nb d'occurences de la chaine return nbtrouve ; }
int main() { schClass cible ;
//en dur pr test cible.chaine_Rech="BANQUE.PS" ; cible.chemin="C:\\toto\\" ; cible.fichier="titi.ini" ;
std::cout << "Pour le fichier " << cible.fichier << "il y a : " << cible.rech_Chaine() << "occurences.\n" ;
cible.fichier="tata.ini" ; std::cout << "Pour le fichier " << cible.fichier << "il y a : " << cible.rech_Chaine() << "occurences.\n" ;
return 1 ; }
|
Sauriez vus me dire ce que j'ai oublié de faire pour pouvoir fermer mon fichier ???
d'avance merci
Aller doucement n'empèche pas d'arriver ! (mais c'est plus long ...)