Fread et fwrite
Résolu/Fermé
tralali
Messages postés
3
Date d'inscription
vendredi 17 avril 2009
Statut
Membre
Dernière intervention
27 avril 2009
-
17 avril 2009 à 23:25
ahmed_jso Messages postés 4 Date d'inscription lundi 27 septembre 2010 Statut Membre Dernière intervention 30 septembre 2010 - 30 sept. 2010 à 17:29
ahmed_jso Messages postés 4 Date d'inscription lundi 27 septembre 2010 Statut Membre Dernière intervention 30 septembre 2010 - 30 sept. 2010 à 17:29
5 réponses
tralali
Messages postés
3
Date d'inscription
vendredi 17 avril 2009
Statut
Membre
Dernière intervention
27 avril 2009
7
27 avril 2009 à 20:38
27 avril 2009 à 20:38
En effet je j'ai oublié de changer ce petit détail qui change tous.
Tous marche comme je veux maintenant, au cas ou quelqu'un se poserait une question similaire, voici les fonctions que j'appelle successivement dans mon main:
void fichier_binaire()
{
FILE* fd;
fd=fopen("fichier.bin","ab");
unsigned char a=3;
fwrite(&a,sizeof(char),1,fd);
fclose(fd);
}
void fichier_binaire2()
{
FILE* fd;
fd=fopen("fichier.bin","rb");
unsigned char b=0;
int c=0;
c=fread(&b,sizeof(char),1,fd);
printf("%d élément lu dans le fichier binaire:%d\n",c,b);
fclose(fd);
}
Tous marche comme je veux maintenant, au cas ou quelqu'un se poserait une question similaire, voici les fonctions que j'appelle successivement dans mon main:
void fichier_binaire()
{
FILE* fd;
fd=fopen("fichier.bin","ab");
unsigned char a=3;
fwrite(&a,sizeof(char),1,fd);
fclose(fd);
}
void fichier_binaire2()
{
FILE* fd;
fd=fopen("fichier.bin","rb");
unsigned char b=0;
int c=0;
c=fread(&b,sizeof(char),1,fd);
printf("%d élément lu dans le fichier binaire:%d\n",c,b);
fclose(fd);
}
L'indication "ab" n'est pas réglo (comprendre pas Posix), de toute façon, sous Linux le 'b' ne sert à rien. De toute façon, binaire ou pas, l'erreur ne vient pas de là.
Si la fonction 'fread' retourne '0', c'est qu'elle n'a pas pu lire 1 seul octet. Pourquoi ? Simplement parce que le pointeur courant du fichier se trouve en fin de fichier puisque l'ouverture a été faite en 'append', c'est à dire en fin de fichier; et en fin de fichier, il n'y a rien à lireCQFD.
Il faut donc fermer le fichier avant de le relire (ou évidemment de déplacer le pointeur courant).
Bon courage.
Si la fonction 'fread' retourne '0', c'est qu'elle n'a pas pu lire 1 seul octet. Pourquoi ? Simplement parce que le pointeur courant du fichier se trouve en fin de fichier puisque l'ouverture a été faite en 'append', c'est à dire en fin de fichier; et en fin de fichier, il n'y a rien à lireCQFD.
Il faut donc fermer le fichier avant de le relire (ou évidemment de déplacer le pointeur courant).
Bon courage.
tralali
Messages postés
3
Date d'inscription
vendredi 17 avril 2009
Statut
Membre
Dernière intervention
27 avril 2009
7
17 avril 2009 à 23:47
17 avril 2009 à 23:47
Merci pour ta réponse,
je viens tous juste de réécrire le programme en je ferme le fichier avant d'utiliser fread...toujours le même problème fread reourne 0.
je viens tous juste de réécrire le programme en je ferme le fichier avant d'utiliser fread...toujours le même problème fread reourne 0.
ahmed_jso
Messages postés
4
Date d'inscription
lundi 27 septembre 2010
Statut
Membre
Dernière intervention
30 septembre 2010
2
30 sept. 2010 à 17:29
30 sept. 2010 à 17:29
il faut ajote l'instruction fseek(fd, SEEK_SET, 0);
pour retoune le pointeur fe fichie au debut le programme devient comme suit :
#include<stdio.h>
void main()
{
FILE* fd;
fd=fopen("fichier.bin","w+");
int a=3;
int b=-1;
fwrite(&a,sizeof(int),1,fd);
fseek(fd, SEEK_SET, 0);
fread(&b,sizeof(int),1,fd);
printf("élément lu dans le fichier binaire:%d",b);
}
pour retoune le pointeur fe fichie au debut le programme devient comme suit :
#include<stdio.h>
void main()
{
FILE* fd;
fd=fopen("fichier.bin","w+");
int a=3;
int b=-1;
fwrite(&a,sizeof(int),1,fd);
fseek(fd, SEEK_SET, 0);
fread(&b,sizeof(int),1,fd);
printf("élément lu dans le fichier binaire:%d",b);
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ahmed_jso
Messages postés
4
Date d'inscription
lundi 27 septembre 2010
Statut
Membre
Dernière intervention
30 septembre 2010
2
30 sept. 2010 à 17:29
30 sept. 2010 à 17:29
cv maintenant