OVH Cloud OVH Cloud

probleme avec ofstream

3 réponses
Avatar
dark poulpo
bonsoir,
voila jai creer un fichier avec

ofstream sortie(ff );
sortie.write( (char *) &f, sizeof(structure)); // operation refaite n fois,
les données dans la stucture sont des valeurs de 0 a 255, structure fait 256
octets
sorttie.close();
------------ et ensuite jessai de le lire: ---------

ifstream entree;
entree.open(ff);
if (!entree.is_open()) return;
...
while (entree.read((char *) &t, sizeof(structure)))


...
}
entree.close(); // fortement recommandé
-------------------------------------

mon probleme est que entree.read me lit les premiers 256 octets (la
structure), et sort irectement de la boucle, alors que le fichier fait plus
de 4Ko.
ca refuse donc de me lire la suite!!!!!!!

si quelqu'un peut m'aider,,, merci d'avance!!!!!

3 réponses

Avatar
Michel Michaud
Dans news:cfgsmd$iiq$, dark
ofstream sortie(ff );


Il faut ouvrir le fichier en mode binaire, ici :

ofstream sortie(ff, ios_base::binary);

Et là :
ifstream entree;


ifstream entree(ff, ios_base::binary);

entree.open(ff);


Pourquoi tu faisais ça en deux étapes ici ?

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

Avatar
dark poulpo
"Michel Michaud" a écrit dans le message news:
MLUSc.26490$
Dans news:cfgsmd$iiq$, dark
ofstream sortie(ff );


Il faut ouvrir le fichier en mode binaire, ici :

ofstream sortie(ff, ios_base::binary);

Et là :
ifstream entree;


ifstream entree(ff, ios_base::binary);

entree.open(ff);


Pourquoi tu faisais ça en deux étapes ici ?

--
Michel Michaud
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/

merci

je vais faire ca,
j'ouvre pas en 2 etapes, c'est parce que "plus loin" siginifie en fait "dans
une autre procedure (load et save)


Avatar
drkm
"dark poulpo" writes:

entree.close(); // fortement recommandé


Bof. Si tu ne testes pas si la fermeture s'est bien passée et que
tu n'as pas besoin d'une fermeture avant la fin de portée, je ne vois
pas trop l'intérêt.

De mémoire, pour tester la fermeture, je dirais :

if ( ! entree.rdbuf()->close() ) {
// erreur
}

si tu es certain que le fichier est ouvert, sinon :

if ( entree.is_open() && ! entree.rdbuf()->close() ) {
// erreur
}

--drkm, en recherche d'un stage : http://www.fgeorges.org/ipl/stage.html