VIVEZ LE
FOOTBALL !

Posez votre question Signaler

Fread et fwrite [Résolu]

tralali 3Messages postés 17 avril 2009Date d'inscription - Dernière réponse le 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).
Lire la suite 

Fread et fwrite »

6 réponses
Réponse
+4
moins plus
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);
}
Ajouter un commentaire
Réponse
+1
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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.
loupius - 18 avril 2009 à 02:38
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 ?
Ajouter un commentaire
Ce document intitulé « fread et fwrite » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?