Lecture fichier binaire [Résolu]

Signaler
Messages postés
20
Date d'inscription
lundi 14 mars 2005
Statut
Membre
Dernière intervention
29 juillet 2009
-
Messages postés
20
Date d'inscription
lundi 14 mars 2005
Statut
Membre
Dernière intervention
29 juillet 2009
-
Bonjour;
Je travaille sur les fichiers en ce moment et j'aurai aimé savoir aprés la lecture d'un fichier avec :
FILE* file = fopen("toto.bin", "rb");
fread(&toto, sizeof(MyStruct), 1, file);

comment on faisait pour afficher le contenu du fichier
J'ai essayé avec :
cout << toto << endl;

mais il me retourne une erreure, y a t-il une fonction spéciale?

7 réponses

Messages postés
20
Date d'inscription
lundi 14 mars 2005
Statut
Membre
Dernière intervention
29 juillet 2009
1
merci a tous j'ai enfin trouvé d'ou ca vennait )
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011

FILE* fp;if((fp fopen("toto.bin", "rb")) NULL) return false; // par exemple

char szBuffer[2048];

while(fgets(szBuffer, sizeof(szBuffer), fp))
printf("%s", szBuffer);

fclose(fp);

Je n'ai pas testé (je viens de coder ça direct) mais ça devrait marcher sans aucun problême
J'espère avoir pu t'aider!

Bonne soirée à tous !

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
Messages postés
20
Date d'inscription
lundi 14 mars 2005
Statut
Membre
Dernière intervention
29 juillet 2009
1
Je viens d'essayer et ca n'a pas résolu mon pb ca veut donc peut etre dire que c'est l'ecriture ds le fichier qui ne fonctionne pas.
Voila le code d'insertion (si qq'un a une idee je suis preneur) :

int n;
short numtoto;
short tempFour;
char responsable[21];
float tempsCuissonTotal;
float tempsCuissonRealise;


struct MyStruct
{
short *numtoto;
short *tempFour;
char *responsable[21];
float *tempsCuissonTotal;
float *tempsCuissonRealise;
};


FILE * fp;
fp = fopen ("toto.dat", "wb"); //création et/ou ouverture

numtoto = 1;
cout << "Temperature :";
cin >> temptoto;
cout << "Responsable :";
cin >> responsable;
cout << "tempsCuissonTotal :";
cin >> tempsCuissonTotal;
cout << "tempsCuissonRealise :";
cin >> tempsCuissonRealise;


MyStruct toto;

fwrite(&toto, sizeof(MyStruct), 1, fp);
fclose (fp) ; // fermeture
Messages postés
273
Date d'inscription
samedi 5 juillet 2003
Statut
Membre
Dernière intervention
31 mars 2015
2
Salut,


Je crois que le fichier que tu veux lire contient uniquement des doubles ou des intergers.


Donc pour le fichier essai de faire comme Gendal67 mais au lieu de printf("%s", szBuffer); ecris plutôt:
printf("%lf", szBuffer);

et double szBuffer[2048];
essai au sinon printf("%c", szBuffer); et: char szBuffer[2048];

Jarod_Delaware
Messages postés
20
Date d'inscription
lundi 14 mars 2005
Statut
Membre
Dernière intervention
29 juillet 2009
1
Non il y a aussi des char.

Ma structure est-elle bien passée ds mon fichier?
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011

benus, non....ta structure n'est pas bien passée! je te corrige tout ça :

struct MyStruct
{
short *numtoto;
short *tempFour;
char *responsable[21]; // pas de pointeur ici si tu mets[21];
float *tempsCuissonTotal;
float *tempsCuissonRealise;
};

FILE * fp;
fp = fopen ("toto.dat", "wb"); //création et/ou ouverture

MyStruct toto; // y faut le déclarer ici

numtoto = 1;
cout << "Temperature :";
cin >> &toto.temptoto; // il faut spécifier que c de lobjet toto + passage par référence
cout << "Responsable :";
cin >> toto.responsable; // pas de référence car c un char*
cout << "tempsCuissonTotal :";
cin >> &toto.tempsCuissonTotal;
cout << "tempsCuissonRealise :";
cin >> &toto.tempsCuissonRealise;

fwrite(&toto, sizeof(MyStruct), 1, fp);
fclose (fp) ; // fermeture

Le passage par référence se fait pour les nombres (et bien qur d'autres choses aussi) pour que l'on puisse vraiment modifier la valeur de ce nombre par la fonction appellante (ici, cin)

J'espère avoir pu t'aider

Gendal67, Dev-C++ 4.9.9.1, J'adore cppfrance!! :-))
Messages postés
20
Date d'inscription
lundi 14 mars 2005
Statut
Membre
Dernière intervention
29 juillet 2009
1
Merci ca me parait deja plus abouti )
Ms il me retourne cette erreur :

[C++ Erreur] Unit1.cpp(31): E2015 Ambiguïté entre '_STL::basic_istream<char,_STL::char_traits<char> >::operator >>(bool &)' et '_STL::basic_istream<char,_STL::char_traits<char> >::operator >>(void * &)'

la ligne correspondante est celle ci :

cin >> &toto.temptoto;

J'ai fait qq modifs ms rien a faire