Fread et fwrite

Résolu
tralali Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
ahmed_jso Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   7
 
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
loupius
 
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   Statut Membre Dernière intervention   7
 
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
loupius
 
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   Statut Membre Dernière intervention   2
 
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   Statut Membre Dernière intervention   2
 
cv maintenant
1