eregistrer une structure en C++

eregistrer une structure en C++ - C++ - Programmation

Marsh Posté le 15-12-2002 à 19:19:44    

je voudrais pouvoir enregistrer dans un ficheir une structure et ceci en C++.
je n'y arrive pas avec l'opérateur << de la class ofstream.Comment faire?
 
 

Reply

Marsh Posté le 15-12-2002 à 19:19:44   

Reply

Marsh Posté le 15-12-2002 à 19:26:45    

redefinir l'operateur <<


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 15-12-2002 à 19:35:48    

tu peux faire un truc bourrin mais qui marche bien :

Code :
  1. fichier.write( reinterpret_cast<const char*>(&ta_struct), sizeof(ta_struct));


et pour relire :

Code :
  1. fichier.read( reinterpret_cast<char*>(&ta_struct), sizeof(ta_struct));


Message édité par kjus le 15-12-2002 à 19:36:58
Reply

Marsh Posté le 15-12-2002 à 19:37:50    

kjus a écrit :

tu peux faire un truc bourrin mais qui marche bien :
 
fichier.write( reinterpret_cast<const char*>(&ta_struct), sizeof(ta_struct));
 
et pour relire :
 
fichier.read( reinterpret_cast<char*>(&ta_struct), sizeof(ta_struct));

et si tu as autre chose que des types de bases, tu peux te brosser :pfff:. tout en sachant que ce n'est pas portable.


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 15-12-2002 à 21:36:24    

bien sur ce n'est pas une solution idéal, mais si weblook demande ca je pense qu'il ne connait pas la surcharge des opérateurs...

Reply

Marsh Posté le 15-12-2002 à 21:38:32    

ouais mais bon, le reinterpret_cast<char*> c'est pas ça qui va t'afficher la chaine pointée par une char*


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 16-12-2002 à 05:03:29    

Comme ça pour écrire en "mettant en forme":

Code :
  1. struct machin{
  2. int a,b;
  3. friend fstream& operator<<(fstream&, const machin&);
  4. };
  5. fstream& operator<<(fstream& fs, const machin& m){return fs << "{" << m.a << "," << m.b << "}"; }


 
Comme kjus propose pour une écriture brute.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 16-12-2002 à 08:09:50    

je rappelle que l'ecriture d'un caractère c'est 'c' et pas "c"


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 16-12-2002 à 10:22:00    

y a pas une syntaxe toute conne qui permet d'écrire la structure en un seul coup, un peu à l'instar du c:  [fwrite(&ma_struct,...) ]?

Reply

Marsh Posté le 16-12-2002 à 12:03:31    

Taz@PPC a écrit :

et si tu as autre chose que des types de bases, tu peux te brosser :pfff:. tout en sachant que ce n'est pas portable.


oui mais bon la portabilite ca existe pas vraiment au niveau des fichiers. Il suffit que tu ais une machine en ASCII et une en EBCDIC pour que les fichiers textes soient pas portables...

Reply

Marsh Posté le 16-12-2002 à 12:03:31   

Reply

Marsh Posté le 16-12-2002 à 12:11:40    

Taz@PPC a écrit :

je rappelle que l'ecriture d'un caractère c'est 'c' et pas "c"


 
Le stream prévoit le type char ? pcq j'ai déjà eu la blague avec les AnsiString de C++Builder (oui je sais c'est moins bien que le type string, mais pour utiliser la VCL c'est plus pratique) : il prévoit int et char * mais pas char.
Donc si tu utilises des char il prend ça comme des int, et tu te retrouves avec le code ASCII de ton caractère dans ta chaîne à la place du caractère lui-même :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 16-12-2002 à 12:12:35    

weblook$ a écrit :

y a pas une syntaxe toute conne qui permet d'écrire la structure en un seul coup, un peu à l'instar du c:  [fwrite(&ma_struct,...) ]?


 
Si, c'est ce que t'as donné kjus, mais faut faire gaffe avec ça, ça dépend de ce que t'as dans ta structure...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 17-12-2002 à 06:08:40    

Taz@PPC a écrit :

je rappelle que l'ecriture d'un caractère c'est 'c' et pas "c"


J'ai failli.
Des restes de mon infection VB sans doute.
Aussi, un cerveau ça marche moins bien à 5h du matin...
 
 
Bon, je pense que weblook$ veut ça:

Code :
  1. template <typename F, typename S>
  2. void rawwrite(F fichier, S& structure){
  3. fichier.write( reinterpret_cast<const char*>(&structure), sizeof(S));
  4. }
  5. rawwrite(monfichier, monobjet);


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 18-12-2002 à 20:22:02    

Musaran a écrit :


J'ai failli.
Des restes de mon infection VB sans doute.
Aussi, un cerveau ça marche moins bien à 5h du matin...
 
 
Bon, je pense que weblook$ veut ça:

Code :
  1. template <typename F, typename S>
  2. void rawwrite(F fichier, S& structure){
  3. fichier.write( reinterpret_cast<const char*>(&structure), sizeof(S));
  4. }
  5. rawwrite(monfichier, monobjet);




impeccable, thanks

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed