ecriture reecriture fichier en mode binaire

ecriture reecriture fichier en mode binaire - C++ - Programmation

Marsh Posté le 09-04-2003 à 15:51:52    

Bonjour,
 
Voila j'ai ecrit une procedure (je vous l'accorde pour l'instant elle sert pas a grand chose) mais quand je l'ai lancee pour la testee (j'aime bien les tests en cours de route) je suis reste bete sur le resultat. N'ayant pas l'habitude de manipuler les E/S binaires je vous soumets le probleme :
 
- Le code :
 

Code :
  1. void traduction(char *nom_in,char *nom_out,char **tabcorresp)
  2. {
  3. ifstream filein;
  4. ofstream fileout;
  5. char c;
  6. filein.open(nom_in,ios::in | ios::binary);
  7. if (!filein.good()) {cout << "erreur lecture " << nom_in << endl;exit(1);}
  8. fileout.open(nom_out,ios::out | ios::binary);
  9. if (!fileout.good()) {cout << "erreur ecriture " << nom_out << endl;exit(1);}
  10. while (filein.good())
  11.       {
  12.       c=filein.get();
  13.       fileout << c;
  14.       }
  15. filein.close();
  16. fileout.close();
  17. }


 
- le fichier d'entre :
aa
bb
ccccc
eeeeeee
f
- le fichier de sortie :
aa
bb
ccccc
eeeeeee
fÿ
 
- le soucis : bah c'est le "ÿ", d'ou qui sort cui-la ?
 
merci d'avance
 
 
 
 

Reply

Marsh Posté le 09-04-2003 à 15:51:52   

Reply

Marsh Posté le 09-04-2003 à 15:57:09    

Essaie qqch du style  

Code :
  1. do     {
  2.      c=filein.get();
  3.      fileout << c;
  4.      }
  5. while (filein.good())

Reply

Marsh Posté le 09-04-2003 à 16:02:17    

Je viens d'essayer, j'ai le meme resultat.
J'avais oublie de le preciser, je suis sous Windows.
Il me semble par ailleurs que ce "ÿ" doit avoir comme code ASCII 255.

Reply

Marsh Posté le 09-04-2003 à 16:08:14    

Code :
  1. c=filein.get();
  2. while (filein.good())
  3. {
  4.     fileout << c;
  5.     c=filein.get();
  6. }


 
ton caractere 255 est juste un debordement de buffer
dans ta boucle, tu ecris avant de tester si tu a eu une erreur lors de la lecture du caractere, alors qu'il te faut faire l'inverse.
 
De maniere generale, un test d'erreur doit toujours etre juste apres l'instruction qui pêut le generer ;)

Reply

Marsh Posté le 09-04-2003 à 16:13:24    

honte a moi...
merci beaucoup.

Reply

Marsh Posté le 09-04-2003 à 16:29:25    

ou carrément  
 
while((c=cin.get())!= EOF)
{
}

Reply

Sujets relatifs:

Leave a Replay

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