Lecture fichier binaire

Résolu
cs_benus
Messages postés
20
Date d'inscription
lundi 14 mars 2005
Statut
Membre
Dernière intervention
29 juillet 2009
- 17 avril 2005 à 19:20
cs_benus
Messages postés
20
Date d'inscription
lundi 14 mars 2005
Statut
Membre
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?

7 réponses

cs_benus
Messages postés
20
Date d'inscription
lundi 14 mars 2005
Statut
Membre
Dernière intervention
29 juillet 2009
1
18 avril 2005 à 17:54
merci a tous j'ai enfin trouvé d'ou ca vennait )
1
Gendal67
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011
2
17 avril 2005 à 19:33
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!! :-))
0
cs_benus
Messages postés
20
Date d'inscription
lundi 14 mars 2005
Statut
Membre
Dernière intervention
29 juillet 2009
1
17 avril 2005 à 19:48
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
0
Jarod1980
Messages postés
273
Date d'inscription
samedi 5 juillet 2003
Statut
Membre
Dernière intervention
31 mars 2015
2
17 avril 2005 à 20:02
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_benus
Messages postés
20
Date d'inscription
lundi 14 mars 2005
Statut
Membre
Dernière intervention
29 juillet 2009
1
17 avril 2005 à 21:05
Non il y a aussi des char.

Ma structure est-elle bien passée ds mon fichier?
0
Gendal67
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011
2
18 avril 2005 à 09:59
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!! :-))
0
cs_benus
Messages postés
20
Date d'inscription
lundi 14 mars 2005
Statut
Membre
Dernière intervention
29 juillet 2009
1
18 avril 2005 à 12:23
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
0