Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1318 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] ecrire dans un fichier non formatté avec stl

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] ecrire dans un fichier non formatté avec stl

n°473191
fucky_fuck
Posté le 31-07-2003 à 14:37:41  profilanswer
 

salut,
 
ben j'ai essaye avec un ofstream avec le flag ios::binary , mais il m'écrit quand meme tout en formatte ...
 
je suis paume là ... une petite indication ?
 
merci

mood
Publicité
Posté le 31-07-2003 à 14:37:41  profilanswer
 

n°473194
Taz
bisounours-codeur
Posté le 31-07-2003 à 14:39:11  profilanswer
 

un exemple de code

n°473197
LetoII
Le dormeur doit se réveiller
Posté le 31-07-2003 à 14:39:34  profilanswer
 

T'as un bout de code?
 
[:benou_grilled]


Message édité par LetoII le 31-07-2003 à 14:40:43

---------------
Le Tyran
n°473198
fucky_fuck
Posté le 31-07-2003 à 14:40:02  profilanswer
 

Code :
  1. void writeToFile(string filename)
  2. {
  3.  ofstream pf(filename.c_str(),ios::binary | ios::out | ios::trunc);
  4.  list<HiScore>::const_iterator iter;
  5.  
  6.  for (iter=wHiScoreList.begin(); iter != wHiScoreList.end(); iter++)
  7.  {
  8.   pf << *iter << endl;
  9.  }
  10. }


Message édité par fucky_fuck le 31-07-2003 à 14:41:10
n°473201
Taz
bisounours-codeur
Posté le 31-07-2003 à 14:40:58  profilanswer
 

ça marchera jamais ton truc. les seuls chose qu'on peut ecrire en C++ c'est des types de bases

n°473202
fucky_fuck
Posté le 31-07-2003 à 14:41:54  profilanswer
 

ben oui mais j'ai surchargé le << de hiscore ...
 

Code :
  1. ostream & operator << (ostream & os,const HiScore & hi)
  2. {
  3. return os << hi.getName() << "  " << hi.getScore();
  4. }

n°473203
fucky_fuck
Posté le 31-07-2003 à 14:42:38  profilanswer
 

là il m'écrit :
 
 
alex  12
rene  62
robert  123
jm  20000

n°473205
fucky_fuck
Posté le 31-07-2003 à 14:43:05  profilanswer
 

mais moi, je veux la même chose en non formatté, pour pas qu'on puisse bidouiller trop facilement ...

n°473207
Taz
bisounours-codeur
Posté le 31-07-2003 à 14:43:53  profilanswer
 

t'as sur chargé op<< ?

n°473209
LetoII
Le dormeur doit se réveiller
Posté le 31-07-2003 à 14:44:23  profilanswer
 

On pourrait avoir les proto des méthodes getName et getScore?


---------------
Le Tyran
mood
Publicité
Posté le 31-07-2003 à 14:44:23  profilanswer
 

n°473210
fucky_fuck
Posté le 31-07-2003 à 14:44:58  profilanswer
 

enfin pas surcharger, mais je l'ai defini quoi ...
comme ça je peut faire cout << unHIscore ...

n°473212
fucky_fuck
Posté le 31-07-2003 à 14:45:26  profilanswer
 

string getName () const  {return wName;}
unsigned int getScore () const  {return wScore;}

n°473213
Taz
bisounours-codeur
Posté le 31-07-2003 à 14:45:49  profilanswer
 

bon ben c'est pas la méthode alors... quelqu'un lui explique

n°473214
skeye
Posté le 31-07-2003 à 14:45:54  profilanswer
 

LetoII a écrit :

On pourrait avoir les proto des méthodes getName et getScore?


[:benou_+1]
Il est plein de trous le code donné... :(

n°473216
fucky_fuck
Posté le 31-07-2003 à 14:46:15  profilanswer
 

ce serait cool ...

n°473218
Taz
bisounours-codeur
Posté le 31-07-2003 à 14:47:17  profilanswer
 

si tu as des E/S textesx avec les << >> et ça ne change quasiment rien de mettre ton fichier en binaire, voir rien du tout selon ton système

n°473224
fucky_fuck
Posté le 31-07-2003 à 14:48:23  profilanswer
 

ouais ça j'ai bien vu, mais alors, je fais coment pour écrire dans le fichier en mode non formatté ?
 
il faut pas que je me serve des << >> ?

n°473228
fucky_fuck
Posté le 31-07-2003 à 14:49:27  profilanswer
 

normalement, je me sert de open, et fopen ...
et la c un open que je veux faire ...

n°473232
Taz
bisounours-codeur
Posté le 31-07-2003 à 14:50:18  profilanswer
 

ben vu que tu as du texte essentiellement, trouves toi un système de cryptage, genre des XOR. apres fo faire des write(reinterpret_cast<char*>(&un_type_de_base), sizeof un_type_de_base) (sauf pour les char* evidemment)

n°473235
fucky_fuck
Posté le 31-07-2003 à 14:51:16  profilanswer
 

ouais mais ça c si je me sert de open ...
mais avec la STL y 'a pas un moyen simple ?

n°473239
fucky_fuck
Posté le 31-07-2003 à 14:52:29  profilanswer
 

genre si tu voulais ecrire les coordonnées d'un monde 3d, tu l'écrirais pas en mode texte ... tu ferais comment avec la STL ?

n°473242
Joel F
Real men use unique_ptr
Posté le 31-07-2003 à 14:52:48  profilanswer
 

Transtype tes chaines en tableaux de flottants et sauve le comme ca  
 
 
 
 
 
 
<je sors>

n°473322
fucky_fuck
Posté le 31-07-2003 à 15:10:34  profilanswer
 

nan mais meme si je ferais pas comme ça, je voudrais bien savoir comment on fait !
 
je suis curieux !  
 

n°473348
Joel F
Real men use unique_ptr
Posté le 31-07-2003 à 15:21:32  profilanswer
 

faut utiliser un flux binaire (ios::binary je crois) et zou c fini.

n°473411
fucky_fuck
Posté le 31-07-2003 à 15:45:10  profilanswer
 


finalement, j'ai fait comme ça :
 

Code :
  1. void writeToFile(string filename)
  2. {
  3. int pf = open(filename.c_str(),_O_WRONLY | _O_CREAT | _O_BINARY |_O_TRUNC);
  4. list<HiScore>::const_iterator iter;
  5. unsigned int length,score;
  6. for (iter=wHiScoreList.begin(); iter != wHiScoreList.end(); iter++)
  7. {
  8. // Taille du nom
  9. length=(*iter).getName().length()+1;
  10. write(pf,&length,sizeof(unsigned int));
  11. // Nom
  12. write(pf,(*iter).getName().c_str(),length);
  13. //Score
  14. score=(*iter).getScore();
  15. write(pf,&score,sizeof(unsigned int));
  16. }
  17. close(pf);
  18. }


 
je rajoute un petit codage cesar et c parti ...
 
ouais mais attends, j'ai déjà essayer (debut du message), et il m'écriver tout en formatter...


Message édité par fucky_fuck le 31-07-2003 à 15:47:12
n°473417
fucky_fuck
Posté le 31-07-2003 à 15:47:57  profilanswer
 

le ios::binary je crois que ça veux juste dire qu'il t'ecrit pas les CR/LF quand tu as un \n ...

n°473419
Joel F
Real men use unique_ptr
Posté le 31-07-2003 à 15:48:45  profilanswer
 

:non: c pe pas celui la mais y a un truc pour dire que ton flux est un flux binaire  
 
Google est ton ami  :sarcastic:

n°473432
Taz
bisounours-codeur
Posté le 31-07-2003 à 15:55:12  profilanswer
 

l'horreur ! tu sait que les ostream ont une méthode write. ça sera portable, bufferisé et bien plus propre. tu devrais pouvoir faire la modif rapidos


Message édité par Taz le 31-07-2003 à 15:59:53
n°473478
Taz
bisounours-codeur
Posté le 31-07-2003 à 16:11:26  profilanswer
 

Code :
  1. void writeToFile(const string filename)  const
  2.   {
  3.     ostream of(filename.c_str(), ios::binary);
  4.     for (list<HiScore>::const_iterator iter=wHiScoreList.begin();
  5.  iter != wHiScoreList.end();
  6.  ++iter)
  7.     {
  8.       const string &s(iter->getName());
  9.       of.write(reinterpret_cast<const char *>(&s.size()),
  10.        sizeof s.size());
  11.       of.write(s.data(),
  12.        s.length());
  13.       of.write(reinterpret_cast<const char *>(iter->getScore()),
  14.        sizeof iter->getScore());
  15.     }
  16.   }


 
me parait mieux (j'ai pas compilé, mais à priori c'est correct

n°473741
Taz
bisounours-codeur
Posté le 31-07-2003 à 21:12:25  profilanswer
 

autant s'écrire un petit manipulateur pour une class Foo par exemple (on peut tres bien mettre un relation d'héritage là.
 
 
 

Code :
  1. #include <iostream>
  2. using namespace std;
  3. struct Foo{};
  4. class FooBinaryWriter
  5. {
  6. public:
  7.   explicit FooBinaryWriter(const Foo &f):
  8.     foo(f)
  9.   {}
  10.   inline ostream & operator()(ostream &os) const
  11.   {
  12.     os <<  " *** j\'ecris *** ";
  13.     // et des trucs binaires avec os.write
  14.     // cette classe peut être amie de Foo
  15.     return os;
  16.   }
  17. private:
  18.   const Foo &foo;
  19. };
  20. ostream& operator<<(ostream &os, const FooBinaryWriter &fbw)
  21. {
  22.   return fbw(os);
  23. }
  24. inline FooBinaryWriter FBW(const Foo &f)
  25. {
  26.   return FooBinaryWriter(f);
  27. }
  28. int main()
  29. {
  30.   Foo f;
  31.   cout << "Hello" << FBW(f) << "world" << endl;
  32. }

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] ecrire dans un fichier non formatté avec stl

 

Sujets relatifs
Rajouter des lignes automatiquement dans un fichier TXT[Java] Utiliser un fichier comme un bd?
[XML] Recuper des données dans un fichier XMLecire a la suite d un fichier texte pourquoi mon exemple ne marche pas
Lecture dans un fichier ou STLClasse de lecture de fichier encodées - Approche Objet
Recuperation des infos d un fichier (-> Propriétés / onglet résumé )[Java] lire un fichier binaire
problème de fichier .htaccess[MySQL] Comment exécuter les commandes contenues dans un fichier ?
Plus de sujets relatifs à : [C++] ecrire dans un fichier non formatté avec stl


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR