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 -
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).
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
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.
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.
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