bonjour,

Je travail sur un projet où j'ai besoin de sérialiser en binaire un objet (Contig).
Cet objet contient :

string name, string basecalls, string quality et un vector <pair <string,string> >.

L'idée de mon main est de parser un fichier, puis je prend les infos de ce fichier j'en crée mes objets Contig, toujours dans le main, j'ai un vecteur de Contig que je souhaite donc sérialiser. Pour ceci j'ai mon operator<< que voici :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
//Contig.cpp
ostream& operator<< (ostream& stream, Contig const &obj) {
  size_t nameSize (obj.name.length()), basecallsSize(obj.basecalls.length()), qualitySize(obj.quality.length()), vectorSize (obj.v_DirPos.size()), srcSize, clrSize;
 
  //name, basecalls and quality
  stream.write ((char*)&nameSize, sizeof(int));
  stream.write (obj.name.c_str(), nameSize);
 
  stream.write ((char*)&basecallsSize, sizeof(int));
  stream.write (obj.basecalls.c_str(), basecallsSize);
 
  stream.write ((char*)&qualitySize, sizeof(int));
  stream.write (obj.quality.c_str(), qualitySize);
 
  //vector
  stream.write ((char*)&vectorSize, sizeof(vectorSize));
  for (int i=0; i<(signed)obj.v_DirPos.size(); i++) {
    srcSize=obj.v_DirPos[i].first.length();
    stream.write ((char*)&srcSize, sizeof(srcSize));
    stream.write (obj.v_DirPos[i].first.c_str(), srcSize);
 
    clrSize=obj.v_DirPos[i].second.length();
    stream.write ((char*)&clrSize, sizeof(clrSize));
    stream.write (obj.v_DirPos[i].second.c_str(), clrSize);
  }
  return stream;
}
Dans mon main, je fais appel a celui ci, comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
//main.cpp
int main(void) {
  try {
    vector<Contig> contigVector;
    Contig c1;
    Parser p;
    filebuf fb;
    char * file = "res/velvet_asm.afg";
 
    fb.open (file, ios::in);
    istream is (&fb);
 
    p.parseFile (is);
    contigVector = p.vectorToContig (p.getVector());
 
    ofstream ofs("res/output",ofstream::binary);
    ostream_iterator<Contig> osi (ofs);
    copy(contigVector.begin(), contigVector.end(), osi);
    //etc...
Voila, donc il doit sans doute y avoir des manière plus propre de coder ce que j'ai fait...

Sinon mon problème est que mon fichier de sortie n'est pas en binaire, il est bel et bien écrit en ascii et lisible par un humain^^. C'est donc la mon problème et je ne vois pas vraiment ce qui ne va pas dans mon code...
si besoin de plus de précision, pas de souci.

Merci d'avance.