Problème lecture écriture par bloc dans un fichier
bonsoir,
Voici mon problème, j'écrit des données dans un fichier texte avec fwrite () puis les lis avec fread (), jusque là pas de problème tout marche bien, seulement voila ce que je lis n'est pas ce que j'ai écrit :( et je n'arrive pas à voir si cela vient de l'écriture ou de la lecture ou bien des deux. Voici mes fonctions d'écriture:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| void ecrireSeq(FILE *f, sequence s)
{
char buff = 0;
size_t n = CHAR_BIT;
while (s != NULL)
{
buff <<= 1;
buff |= s->data;
n--;
if (n == 0)
{
fwrite(&buff, sizeof buff, 1, f);
n = CHAR_BIT;
}
s = s->suivant;
}
if (n != 0)
{
fwrite(&buff, sizeof buff, 1, f);
}
return;
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| void ecrireLst(FILE *f, liste l)
{
while (l != NULL)
{
if (fwrite(&l->data, sizeof l->data, 1, f) != 1)
{
fputs("ecrireLst: Echec d'ecriture", stderr);
exit(1);
}
l = l->suivant;
}
return;
} |
Mes fonctions de lecture:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| sequence bufftoseq(FILE *f)
{
sequence res = NULL;
char buff = 0;
while (fread(&buff, sizeof buff, 1, f) == 1)
{
int i = CHAR_BIT - 1;
for ( ; i >= 0; i--)
{
inserer_apres(&res, buff & 1UL << i);
}
}
if (feof(f) == 0)
{
fputs("bufftoseq: Echec de lecture", stderr);
exit(1);
}
return res;
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| liste lireLst(FILE *f, size_t n)
{
liste res = NULL;
size_t i = 0;
arbrepoids a;
for ( ; i < n; i++)
{
if (fread(&a, sizeof a, 1, f) != 1)
{
libere_listeEntiere(&res);
fputs("lireLst: Echec de lecture", stderr);
exit(1);
}
res = creer_liste(a, res);
}
return res;
} |
Si vous avez besoin d'autres parties du programme pour mieux comprendre n'hésitez pas. Merci d'avance :)