Ecriture d'un objet dans un fichier

Résolu
NikoGJ Messages postés 13 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 21 avril 2005 - 6 oct. 2004 à 15:34
NikoGJ Messages postés 13 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 21 avril 2005 - 6 oct. 2004 à 17:33
Salut!
J'ai un petit (gros) problème: j'essaye de savoir s'il est possible d'écrire dans un fichier binaire, une instance de classe en une seule fois, voici mon code:

livre li; //c'est mon objet li de type livre avec 4 attributs:
//titre, auteur, année et un code entier

fstream f; //je déclare un stream de lecture/écriture

f.open("toto.dat",ios::app|ios::binary); //j'ouvre le fichier en mode binary

f.write(&li,sizeof(livre)); //c'est l'instruction qui foire
//à la compil

f.close(); //fermeture du stream

Est-ce qu'il y a moyen que ça marche comme ça, ou faut-il écrire chaque attribut séparement avec write?

Merci d'avance. :)

7 réponses

steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
6 oct. 2004 à 16:55
oui en effet, le static_cast semble invalide ?

une solution qui me plait moins mais qui marche

f.write( const_cast<const char *>(reinterpret_cast<char *>(&li) ), sizeof li );
3
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
6 oct. 2004 à 16:10
bonjours,

d'apres le prototype de la methode write qui attend un const char * en parametre, un cast devrais suffir

ici ce sera static_cast car le transtypage peut etre resolu a la compilation, sans oublier le const_cast pour passer de char * à const char *

f.write( const_cast<const char *>(static_cast<char *>(&li)), sizeof li );
0
NikoGJ Messages postés 13 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 21 avril 2005
6 oct. 2004 à 16:34
oula, sacré cast, mais bon, ça marche pas est-ce qu'il y existe une solution pour enregistrer le meme objet dans un fichier texte plutot que binaire?
0
NikoGJ Messages postés 13 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 21 avril 2005
6 oct. 2004 à 17:02
Yahoo! ça marche à présent. Merci beaucoup!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NikoGJ Messages postés 13 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 21 avril 2005
6 oct. 2004 à 17:09
euh, encore une p'tite chose, j'ai mis la meme chose pour le read et il compile pas:
le compilo me met: invalid conversion from 'const char*' to 'char'
%-6
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
6 oct. 2004 à 17:23
pour la methode read, le const n'est pas de mise vu que le premier parametre (char *) est un pointeur sur la zone memoire qui recevra les données (et donc modifiée)

il suffit donc d'enlever le const_cast

suivant votre code

f.write( reinterpret_cast<char *>(&li), sizeof li );
0
NikoGJ Messages postés 13 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 21 avril 2005
6 oct. 2004 à 17:33
ça fonctionne bien maintenant, merci pour tout :big)
0
Rejoignez-nous