Fichier binaire

Résolu
loul13 Messages postés 11 Date d'inscription samedi 29 mai 2004 Statut Membre Dernière intervention 15 février 2010 - 20 avril 2006 à 16:58
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 20 avril 2006 à 21:34
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

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
20 avril 2006 à 17:22
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
3
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
20 avril 2006 à 17:24
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
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
20 avril 2006 à 17:27
Ouais mais dans son cas c'est un tableau. Donc pas besoin de &

___________________________________________
Les plus grands esprits trouvent toujours une solution
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
20 avril 2006 à 17:28
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
20 avril 2006 à 17:32
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
0
loul13 Messages postés 11 Date d'inscription samedi 29 mai 2004 Statut Membre Dernière intervention 15 février 2010
20 avril 2006 à 17:36
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
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
20 avril 2006 à 17:37
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.



++
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
20 avril 2006 à 17:39
arf oui , j'ai pas fait attention pour le sizeof, sorry
0
loul13 Messages postés 11 Date d'inscription samedi 29 mai 2004 Statut Membre Dernière intervention 15 février 2010
20 avril 2006 à 18:12
sizeof(ligne) n'a de sens
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
20 avril 2006 à 18:31
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 avril 2006 à 21:20
et si tu reçois test en param, le sizeof dans la fonction dira 4 pour le pointeur.

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

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

ciao...
BruNews, MVP VC++
0
Rejoignez-nous