Fichier binaire [Résolu]

Signaler
Messages postés
11
Date d'inscription
samedi 29 mai 2004
Statut
Membre
Dernière intervention
15 février 2010
-
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
bonjour,

j'essaie de copier un fichier .pdf avec fread et fwrite, mais fread trouve la fin de fichier avant la vrai du fichier
et plus bizarre si j'utilise fseek pour avancer le curseur après il lit le fichier jusqu'à la fin
voici mon code :

int main (void)
{
FILE * pdfin, * pdfout;
int i,j=0,cont;
char ligne [128];
long compt;
pdfout = fopen("c:\\robinson_approx.pdf","w");
pdfin = fopen("robinson_approx.pdf","r");
fprintf (pdfout, "%PDF-1.2\n");
do
{
cont = fread (ligne, sizeof(char), 128, pdfin);
fwrite (ligne, cont, sizeof(char), pdfout);
/* if (!feof(pdfin) fseek(pdfin, 1, SEEK_CUR);*/
}while (!feof(pdfin));
fclose (pdfin);
fclose (pdfout);
return 0;
}

13 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Essais d'ouvrir tes fichier en mode binaire
pdfout = fopen("c:\\robinson_approx.pdf"," wb ");
pdfin = fopen("robinson_approx.pdf","rb");

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
Si je ne m'abuse, fread et fwrite doivent recevoir en 1er paramètre une
adresse ou un pointeur c'est au choix, donc &ligne à la place de
ligne tout court. Tu peut aussi utiliser l'api CopyFile, n'oublie pas
alors d'inclure windows.h .



++ :D
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Ouais mais dans son cas c'est un tableau. Donc pas besoin de &

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
deplus je vient de relir, sizeof(char) ??? tu copie octet par
octet ? Tu doit transmettre la taille de ta structure, ici ligne donc
sizeof(ligne) car sinon tu transfer chaque foi 1 seul caractère dans
ligne.
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
En effet car si tu veut lire octect par octect, t'utilise pas la bonne façon.

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
11
Date d'inscription
samedi 29 mai 2004
Statut
Membre
Dernière intervention
15 février 2010

merci SAKingdom,
pour ta réponse ca marche nickel, ca fait longtemps que j'ai plus manipulé de fichier binaire

deck_bsd-> sizeof(ligne) me renvoie la taille du pointeur et non la taille du tableau
fread (pointeur sur la variable qui doit recevoir les données,
taille du type de donnée,
nombre d'objet,
flux d'entrrée);

merci bien pour vos réponses
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
mdr , encore un truc inverse les paramètre cont et sizeof(char) (dans
ton prog que tu doit remplacer par sizeof(ligne) ;) ). C'est dabord la
taille de la structure juste après le 1er paramètre et tu peut même
remplacer cont par 1. Tous ce que j'ai dit est aussi bien pour fread
que fwrite.



++
Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
arf oui , j'ai pas fait attention pour le sizeof, sorry
Messages postés
11
Date d'inscription
samedi 29 mai 2004
Statut
Membre
Dernière intervention
15 février 2010

sizeof(ligne) n'a de sens
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Comment ça ça na pas de sens. Si tu fais sizeof d'une structure, il va renvoyer la taille de la structure. Fait un petit essais:
char test[128];


int size = sizeof(test);


printf("%d", size);

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
et si tu reçois test en param, le sizeof dans la fonction dira 4 pour le pointeur.

ciao...
BruNews, MVP VC++
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Ouais mais regarde son code, son tableau n'est pas un param

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
j'ai vu mais il faut se méfier de sizeof.

ciao...
BruNews, MVP VC++