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

 


Dernière réponse
Sujet : c++ : bizarre bizarre
Profil supprimé javais deja essayé !

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
javais deja essayé !
tgrx Et la ligne data.close() que j'ai rajoutee juste apres le 'if', elle resout le probleme ou pas ?
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
tgrx 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...
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.
minusplus j'ai rien compris... t'ouvres deux fois le même fichier ??
janoscoder 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...
//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.

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)