Lecture fichier binaire [Résolu]

Messages postés
20
Date d'inscription
lundi 14 mars 2005
Dernière intervention
29 juillet 2009
- - Dernière réponse : cs_benus
Messages postés
20
Date d'inscription
lundi 14 mars 2005
Dernière intervention
29 juillet 2009
- 18 avril 2005 à 17:54
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?
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
20
Date d'inscription
lundi 14 mars 2005
Dernière intervention
29 juillet 2009
3
Merci
merci a tous j'ai enfin trouvé d'ou ca vennait )

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de cs_benus
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Dernière intervention
24 juillet 2011
0
Merci
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!! :-))
Commenter la réponse de Gendal67
Messages postés
20
Date d'inscription
lundi 14 mars 2005
Dernière intervention
29 juillet 2009
0
Merci
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
Commenter la réponse de cs_benus
Messages postés
273
Date d'inscription
samedi 5 juillet 2003
Dernière intervention
31 mars 2015
0
Merci
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
Commenter la réponse de Jarod1980
Messages postés
20
Date d'inscription
lundi 14 mars 2005
Dernière intervention
29 juillet 2009
0
Merci
Non il y a aussi des char.

Ma structure est-elle bien passée ds mon fichier?
Commenter la réponse de cs_benus
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Dernière intervention
24 juillet 2011
0
Merci
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!! :-))
Commenter la réponse de Gendal67
Messages postés
20
Date d'inscription
lundi 14 mars 2005
Dernière intervention
29 juillet 2009
0
Merci
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
Commenter la réponse de cs_benus

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.