RubikEID
Messages postés4Date d'inscriptionjeudi 8 avril 2004StatutMembreDernière intervention 8 avril 2004
-
8 avril 2004 à 16:24
RubikEID
Messages postés4Date d'inscriptionjeudi 8 avril 2004StatutMembreDernière intervention 8 avril 2004
-
8 avril 2004 à 17:37
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
#include <string>
#include <fstream>
using namespace std;
#include //_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 ...)