c++ : bizarre bizarre - Programmation
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...
Marsh Posté le 05-06-2001 à 10:00:16
j'ai rien compris... t'ouvres deux fois le même fichier ??
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.
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...
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
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 ?
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.