problème de lecture de fichier binaire

problème de lecture de fichier binaire - C++ - Programmation

Marsh Posté le 05-05-2009 à 16:25:38    

Bonjour, je cherche à lire un fichier binaire dont je sais que le contenu est valide (je le lis sans problème en c# avec un binaryReader).
 
Je désire le lire dans mon appli c++ mais la lecture ne me renvoie pas du tout les bonnes valeurs: voilà le code qui pose problème:
 

Code :
  1. /** Extraction des sommets du graphe à partir du fichier NDS */
  2. void extraireSommets(ifstream &in){
  3. IDSommet geomID  ;   // IDSommet = unsigned int ....
  4. IDSommet premiereArete  ;
  5.     // Lecture de l'identifiant geom:
  6.     lireBinaire(in , geomID);
  7.     // Lecture de l'indice de l'arête
  8.     lireBinaire(in , premiereArete);
  9.     sommets.push_back(GeomVersSommet(geomID,premiereArete,0 ));
  10.     for (IDSommet sommet = 0; sommet < n ; sommet++){
  11.         // Lecture de l'identifiant geom:
  12.         lireBinaire(in , geomID);
  13.         // Lecture de l'indice de l'arête
  14.         lireBinaire(in , premiereArete);
  15.         cout<<geomID<<" "<<premiereArete<<endl;
  16.         sommets.push_back(GeomVersSommet(geomID,premiereArete,0 ));
  17.         sommets[sommet-1].p3 = premiereArete-1;
  18.     }
  19.     sommets[n-1].p3 = n-1;
  20. }
  21. //...
  22. /** Lecture d'une valeur binaire dans le flux de fichier spécifié */
  23. template < typename type_val >
  24. inline void lireBinaire(ifstream& in, type_val& v) {
  25.     //cout<<"sizeof(v): "<<v<<" :"<<sizeof(v)<<endl;
  26.     in.read((char*)&v, sizeof(v));
  27. }


 
que j'appelle avec:
 

Code :
  1. ifstream in2(fichierNDS.c_str());
  2. if (!in2.is_open()) { cerr << "Impossible d'ouvrir le fichier " << fichierNDS << endl; exit(1); }
  3. extraireSommets(in2);
  4. in2.close();


 
Je ne vois pas d'où vient le problème ... Existe t'il un équivalent libre de la classe binaryReader du framework de visual ? (J'utilise mingw + Gcc 4.3.0 sous code::block et je n'ai pas envie de changer de compilo...).
 
Cordialement,
 

Reply

Marsh Posté le 05-05-2009 à 16:25:38   

Reply

Marsh Posté le 05-05-2009 à 16:31:05    

Par défaut, les fichiers sont ouverts en mode texte. Il faudrait lui indiquer qu'il faut faire une ouverture en mode binaire. Sous C, c'est fopen(filename, "rb" ), mais je ne sais plus ce que c'est en C++.

Reply

Marsh Posté le 05-05-2009 à 16:43:49    

merci je m'en suis rappeller... "ifstream in2(fichierNDS.c_str(), ios::binary);" -> ça marche

Reply

Sujets relatifs:

Leave a Replay

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