problème ecriture et lecture fichier binaire
Bonjour à tous,
je suis débutant et j'ai un petit problème lors de l'écriture d'informations dans un fichier binaire.
J'ai une classe "Perso" qui permet d'afficher et de remplir les variables d'un personnage:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
void Perso::AfficherPerso(Perso& aPerso)
{
cout<<"Nom: "<<aPerso.pnom<<endl;
cout<<"Experience: "<<aPerso.exp<<endl;
cout<<"ID: "<<aPerso.id<<endl;
cout<<"Sante: "<<aPerso.sante<<endl;
cout<<"Classe: "<<aPerso.classe<<endl;
cout<<"Force: "<<aPerso.force<<endl;
cout<<"Agilite: "<<aPerso.agilite<<endl;
cout<<"Intelligence: "<<aPerso.intell<<endl;
}
void Perso::DemanderPerso(Perso& aPerso)
{
cout<<"Creation"<<endl<<endl;
cout<<"Nom:";
cin.ignore(); //vide le choix du menu, vide le buffer
cin.getline(aPerso.pnom,MAXLEN_NOM+1);
cout<<"Entrez force: ";
cin>>aPerso.force;
cout<<"Entrez agilite: ";
cin>>aPerso.agilite;
cout<<"Entrez Intelligence: ";
cin>>aPerso.intell;
} |
Ensuite j'ai une classe fichier qui créer, ouvre, écrit et lit mon fichier, normalement il devrait écrire les valeurs de la classe Perso dans le fichier mais ce n'est pas la cas :( :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| void Fichier::OuvrirEcriture()
{
ofstream fichier ("test.dat", ios::binary);
if(!fichier)
{
cout<<"Erreur a l'ouverture!"<<endl;
}
}
void Fichier::OuvrirLecture()
{
ifstream fichier ("test.dat", ios::in|ios::binary);
if(!fichier)
{
cout<<"Erreur a l'ouverture!"<<endl;
}
}
Fichier& operator<<(Fichier& as, Perso& aPerso)
{
as.seekp(0,ios_base::end); //debut fichier
as.write(aPerso.pnom, Perso::MAXLEN_NOM);
as.write((char *)&(aPerso.exp), sizeof(float));
as.write((char *)&(aPerso.id), sizeof(float));
as.write((char *)&(aPerso.sante), sizeof(float));
as.write((char *)&(aPerso.classe), sizeof(float));
as.write((char *)&(aPerso.force), sizeof(float));
as.write((char *)&(aPerso.agilite), sizeof(float));
as.write((char *)&(aPerso.intell), sizeof(float));
return(as);
}
Fichier& operator>>(Fichier& as, Perso& aPerso)
{
as.read (aPerso.pnom, Perso::MAXLEN_NOM);
aPerso.pnom[Perso::MAXLEN_NOM]=0;
as.read((char *)&(aPerso.exp), sizeof(float));
as.read((char *)&(aPerso.id), sizeof(float));
as.read((char *)&(aPerso.sante), sizeof(float));
as.read((char *)&(aPerso.classe), sizeof(float));
as.read((char *)&(aPerso.force), sizeof(float));
as.read((char *)&(aPerso.agilite), sizeof(float));
as.read((char *)&(aPerso.intell), sizeof(float));
return(as);
} |
Mon main de test avec:
- case'1' qui permet d'entrer un joueur et de d'écrire
- case'2' qui permet de relire le fichier et d'afficher ce qui est lu:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| void main ()
{
char cRep;
Perso testperso;
Menu menutest;
Fichier file;
do {
cRep = menutest.DisplayPrincipal();
switch(cRep)
{
case '1':
file.OuvrirEcriture();
testperso.DemanderPerso(testperso);
file << testperso;
file.flush();
file.close();
break;
case '2':
file.OuvrirLecture();
file.seekp(0,ios_base::beg);
file >> testperso;
testperso.AfficherPerso(testperso);
file.close();
system("pause");
break;
}
}while(cRep!='Q'); |
Mon fichier est bien crée mais il reste vide lors du passage dans case '1'.
Je soupçonne un problème avec mes operators << et >>.
Merci d'avance pour votre aide.