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
Bonjour,
je voudrai écrire et lire un fichier binaire grâce au langage C, je me suis intéressée aux fonction fread et fwrite. Pour commencer simplement j'aimerai juste inscrire 3( 011) en binaire dans le fichier et ensuite lire ce que j'ai inscrit dans le fichier c'est à dire encore 3, juste pour comprendre comment lire et écrire dans un fichier binaire.
Voici ce que j'ai écrit:

void fichier_binaire()
{
FILE* fd;
fd=fopen("fichier.bin","ab");

int a=3;
int b=-1;

fwrite(&a,sizeof(int),1,fd);
fread(&b,sizeof(int),1,fd);
printf("élément lu dans le fichier binaire:%d",b);
}

Ca ne marche pas... mon programme m'affiche -1, la fonction fread retourne 0, je ne lis pas dans mon fichier... je ne sais même pas si j'écris vraiment ce que je veux dans le fichier :( .
Je n'ai pas compris comment utiliser un fichier binaire.


Merci d'avance pour toutes vos réponses (exemples ou cours sur ces fonctions, correction de mon programme, autres alternatives pour écrire et lire dans un fichier binaire).

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
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);
}
6
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.
2
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
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.
1
Oui mais tu dois toujours l'ouvrir en append ce qui positionne le pointeur courant en fin de fichier ou avec écrasement; donc ouvrir simplement avec "r", "r+" ou "a+".
NB: As-tu vérifié que le fichier existe ?
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
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);
}
1

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
cv maintenant
1