c++ : bizarre bizarre

c++ : bizarre bizarre - Programmation

Marsh Posté le 04-06-2001 à 14:34:10    

//si le fichier data n'existe pas,  
 //on le cree, on le preformate et on l'ouvre en mode mise a jour
 data.open (ficdata.c_str (),ios :: binary | ios :: in);
 if (! data.is_open ())
 {
  fp.open (ficdata.c_str (),ios :: binary | ios :: out);
  fp.write ((char*) format,sizeof (SI_Enreg) * NB_ENREG);
  fp.close ();
 }
 fp.open (ficdata.c_str (),ios :: binary | ios :: in | ios :: out);
 
 
si j'ecrit ce code, ca marche.  
mais si j'ecrit
 
 
 //si le fichier data n'existe pas,  
 //on le cree, on le preformate et on l'ouvre en mode mise a jour
 data.open (ficdata.c_str (),ios :: binary | ios :: in);
 if (! data.is_open ())
 {
  data.open (ficdata.c_str (),ios :: binary | ios :: out);
  data.write ((char*) format,sizeof (SI_Enreg) * NB_ENREG);
  data.close ();
 }
 fp.open (ficdata.c_str (),ios :: binary | ios :: in | ios :: out);
 
 
sachent que data et fp sont toutes les deux des fstream, et format est un tableau de NB_ENREG elements de type SI_Enreg.
 
Pourquoi la première version formate le fichier alors que la deuxième le laisse vide ??? pourtant j'ai vérifié et la condition du if est bien verifiée.
j'utilise visual studio 6.

Reply

Marsh Posté le 04-06-2001 à 14:34:10   

Reply

Marsh Posté le 05-06-2001 à 00:29:39    

est-ce que fp et data sont des streams sur le même fichier?
as-tu essayé d'écrire un truc du genre
data<<'a';
pour voir si le problème vient du write ou du reste?
en fait, je pense que le code est bon et le bug ailleurs, mais bon...

Reply

Marsh Posté le 05-06-2001 à 10:00:16    

j'ai rien compris... t'ouvres deux fois le même fichier ??

Reply

Marsh Posté le 05-06-2001 à 13:55:17    

fp et data sont deux fstream, fermées avant le code posté ci dessus.
je sais pas si le pb vient du write, la seule chose qui change c'est le fstream utilisé, mais pourtant il ouvre le même fichier dans la même mode.

Reply

Marsh Posté le 05-06-2001 à 14:02:27    

Dans ton deuxieme cas, verifie que ton fichier est ouvert.
data.open (ficdata.c_str (),ios :: binary | ios :: in);  
if (! data.is_open ())  
{  
  data.close() ; // Par mesure de precaution
  data.open (ficdata.c_str (),ios :: binary | ios :: out);  
  if (data == NULL)
    cout << "Ah l'autre eh" << endl;
  data.write ((char*) format,sizeof (SI_Enreg) * NB_ENREG);  
  data.close ();  
}  
fp.open (ficdata.c_str (),ios :: binary | ios :: in | ios :: out);  
 
Personnellement j'utilise l'operateur == pour savoir si un fichier est ouvert correctement.
If (data == NULL) plutot que (data.is_open()). Ca doit etre exactement la meme chose mais on ne sait jamais...

Reply

Marsh Posté le 05-06-2001 à 16:49:53    

j'ai vérifié et dans les deux cas il rentre dans le if (j'ai mis un printf pour voir).
=> pas de problème de condition

Reply

Marsh Posté le 06-06-2001 à 09:18:19    

Et la ligne data.close() que j'ai rajoutee juste apres le 'if', elle resout le probleme ou pas ?

Reply

Marsh Posté le 06-06-2001 à 10:09:15    

javais deja essayé !

Reply

Sujets relatifs:

Leave a Replay

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