begin process at 2012 05 29 17:08:23
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

problème de fermeture de fichier


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

problème de fermeture de fichier

jeudi 8 avril 2004 à 16:24:20 | problème de fermeture de fichier

RubikEID

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 ...)
jeudi 8 avril 2004 à 16:28:10 | Re : problème de fermeture de fichier

lpikachu58

vérifie qu'il y a pas de débordement de mémoire pendant la phase ou tu écrit dans le fichier

be linux
jeudi 8 avril 2004 à 16:32:00 | Re : problème de fermeture de fichier

RubikEID


merci de me répondre lpikachu58,

mais je n'écris pas dans le fichier, je lis le fichier et je compte le nombre d'occurence de la chaine que je recherche.

donc je ne sais pas s'il y a un risque de débordement de mémoire.
jeudi 8 avril 2004 à 17:16:00 | Re : problème de fermeture de fichier

RubikEID

j'ai enlevé toute la partie de recherche sur le fichier et j'ai juste laissé le open et le close et la la fermeture se fait correctement...

tu parles de debordement mémoire comment je peux vérifier ça ?

c'est mon "(c=infs.get()) != EOF )" qui est pourri ?

j'ai par exemple limité la recherche à la première chaine trouvée, et là aucun problème la fermeture est correcte !

j'ai un autre moyen que de faire le test sur le EOF pour voir la fin de mon fichier ?
jeudi 8 avril 2004 à 17:37:43 | Re : problème de fermeture de fichier

RubikEID

bon ben ça y est !

j'ai rajouté, sans trop savoir ce que ça fait, un clear() avant le close et ça fonctionne

merci pour m'avoir donné cette piste ;)



Cette discussion est classée dans : fichier, chaine, rech, cible, std


Répondre à ce message

Sujets en rapport avec ce message

position d'une chaine de caractére dans un fichier ecriture et lecture [ par yanlou ] salut, bon voila je veux mettre les chaine de caractére d'un fichier dans un autre fichier, j'utilise le code suivant :#include #include #include # à aide svp [ par yanlou ] j'ai un fichier txt ou ya des informations que je veux metre dans un autre fichier mais pas toute, donc je veux choisir les chaine de caractére que je traitement d'un fichier [ par boualiasma ] Salut,J'ai un fichier texte bien formé contient deux champs: objet et attribut.tous les objets sont des entiers et tous les attributs sont de chaines deconcatenation de chaine [ par malouve ] Bonjour, j'ai un fichier txt à traiter en C, ayant plusieurs fichiers, j'entre le chemin du fichier au clavier, je voudrais en sortie, avoir un fich divser une chaine de caractere [ par boualiasma ] Bonjour, J'ai un fichier contenant deux champs: objet (chaine de caractère) et valeur(chaine de caractère) ces deux champs sont séparés par deux poin aide traitement du fichier [ par boualiasma ] J'ai un fichier qui se compose de deux champs : - numero présenté par un entier - attribut présenté par une chaine caractère. On a la même taille po récupération d'un fichier dans un tableau [ par dgac ] Bonjour j'ai essayé le code suivant[CODE] #include&lt soucis avec une classe CChaine [ par coolD ] Qui va lentement va plus loinCoolDBonjour à tous, je dois implémenter pour un exercice de classe une classe de chaine de carcatères. L'utilisateur doi probleme d'extraction des mots d'un fichier [ par cyrina84 ] Merci à tous les developpeurs qui m'ont aidé . Donc voilà ce que j'ai réalisé comme travail: le but est d'extraire les mots des differentes lignes d'u fichie texte [ par cedric3456 ] bonjour je suis tres nul en c++ je debute pouvez vous m'aidez je cherche a faire 3 fonction sur Dev-C++ 4.9.9.2fonction :ecrire (nom_fichier,chaine_ch


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,761 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales