Seekp (pointeur sur un objet)

infodaoudi Messages postés 117 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 30 mars 2012 - 20 févr. 2010 à 15:36
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 - 22 févr. 2010 à 14:44
Bonjour,
j'ai un fichier binaire compose d'une suite d'objet de type RegionMere telle que
class RegionMere
{

float MBR;
Region *Core;
Region *Boundary;
};
et
class Region
{


int nbredata;
float Data[seuilMAX+1];//seuilMax est une constante
float MBR;
}
la question est ce la ligne de commande

A.seekp (sizeof(RegionMere)*(i));//A ofstream binaire
est correcte pour s positionner à ieme regionMere??

Merci pour toute intervention

4 réponses

Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
22 févr. 2010 à 09:04
Salut
Pour moi c'est pas sure du tout... Tout dépend comment est écrit ton fichier. sizeof(RegionMere) te donnera la taille de deux adresses et d'un float et non la taille de toutes tes données.
As tu le code qui gère l'écriture de tes données dans ton fichier?
A+

____________________________________________________________________________
Logiciel en traitement de l'image gratuit et open source.
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
22 févr. 2010 à 09:31
salut,

ouf !! ce n'est pas une liste chainée !! je te conseillerai de ne pas utiliser de pointeurs dans RegionMere, c'est bcp plus simple a gérer surtout pour lire/ecrire dans un fichier :
class RegionMere
{
float MBR;
Region Core;
Region Boundary;
}; 
0
infodaoudi Messages postés 117 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 30 mars 2012
22 févr. 2010 à 14:01
salut,
voila la fonction d'ecriture
void inserer(const char *filename,RegionMere *reg)
{


ofstream A(filename,ios::out|ios::app|ios::binary);
if (!A) cout << "Error opening output file" << endl;

A.write((char*)&(reg->MBR),sizeof(Rect));
A.write((char*)(reg->Core),sizeof(Region));
A.write((char*)(reg->Boundary),sizeof(Region));
A.close();

}
par contre j'ai besoin d'un pointeur sur les regions Core et Bounadry
je vous remerci
0
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
22 févr. 2010 à 14:44
Lorsque tu mets A.write((char*)&(reg->MBR),sizeof(Rect));
ce ne devrait pas être sizeof(float)?

Donc je dirais que tu peux faire quelque chose comme cela:
A.seekp ((sizeof(float)+2*sizeof(Region))*(i));

A+

____________________________________________________________________________
Logiciel en traitement de l'image gratuit et open source.
0
Rejoignez-nous