FILEREADER

cs_tibur Messages postés 101 Date d'inscription samedi 9 février 2002 Statut Membre Dernière intervention 5 mai 2009 - 20 oct. 2009 à 00:25
cs_mogador Messages postés 33 Date d'inscription mercredi 18 octobre 2000 Statut Membre Dernière intervention 4 janvier 2010 - 19 déc. 2009 à 19:31
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/50712-filereader

cs_mogador Messages postés 33 Date d'inscription mercredi 18 octobre 2000 Statut Membre Dernière intervention 4 janvier 2010
19 déc. 2009 à 19:31
Bonjour,

je souhaiterais convertir n'importe quel type de fichier (txt, jpg, avi, exe ...) en fichier binaire ou plutot en fichier texte contenant un suite de 0 et 1. et la meme chose faire le contraire.



#include <stdio.h>

int main(int argc, char **argv) {
/*
FILE *fp;
fp=fopen("test.c", "wb");
char x[10]="ABCDEFGHIJ";
fwrite(x, sizeof(x[0]), sizeof(x)/sizeof(x[0]), fp);
*/

FILE *fp;
fp=fopen("test.c", "rb");
char x[10];//="ABCDEFGHIJ";
fread(x, sizeof(char), 10, fp);

printf("%d================",sizeof(x));
printf("\n");
for(int i=0;i<sizeof(x);i++)
{

printf("%x==========",x[i]);
//printf("\n");
for(int j=7;j>=0;j--)
{
//printf("(%d)",j);
printf("%d",(x[i]>>j)&(255>>7));
}
printf("\n");
}




}





Merci pour votre aide.

sed
FrancoisGauthier Messages postés 21 Date d'inscription samedi 1 août 2009 Statut Membre Dernière intervention 20 mai 2011
20 oct. 2009 à 11:30
Ok j'ai compris.

Pour la petite histoire, j'ai tenté l'aventure du exit(printf("")); pour voir si ça "passait" à la compilation.
Je n'ai pas trop pensé aux implications au delà de ça...

Merci Tibur pour tes explications.
cs_tibur Messages postés 101 Date d'inscription samedi 9 février 2002 Statut Membre Dernière intervention 5 mai 2009
20 oct. 2009 à 11:17
La fonction exit prend en paramètre un entier qui est renvoyé à l'OS afin de déterminer pourquoi le programme a quitté. Si tu dois quitter le programme alors qu'aucune erreur n'est survenue, il est de bon gout de faire exit(0).
Dans le cas où ton programme dois quitter suite à une erreur (par exemple si un fichier n'est pas trouvé), la convention veut que tu fasses un exit(n) où n indique ton erreur.
Cela permet à la personne (au script) qui a lancé ton programme de détecter si tout s'est bien passé, ou s'il y a eu une erreur.
Tout ça pour dire que c'est plutôt étrange que ton programme fasse un exit avec comme paramètre le code de retour de la fonction printf.
FrancoisGauthier Messages postés 21 Date d'inscription samedi 1 août 2009 Statut Membre Dernière intervention 20 mai 2011
20 oct. 2009 à 11:07
Je ne suis pas sur de bien comprendre...
Selon mon code, la fonction exit() termine le programme en cas d'erreur de lecture de fichier. exit() renvois bien un code en retour, et ce n'est pas 0.
Il est vrai que le code retour de exit() n'est pas exploité plus avant, l'info principale étant transmise à l'utilisateur.

Sur mon implémentation, L28: exit(....) fournit la valeur 10 en retour, qui est comprise par l'environnement comme une fin anormale de programme.

Ai-je manqué quelque chose?
cs_tibur Messages postés 101 Date d'inscription samedi 9 février 2002 Statut Membre Dernière intervention 5 mai 2009
20 oct. 2009 à 10:55
Dans ce cas, écris:
printf("FILE NOT FOUND\n");
exit(1);

Un programme doit renvoyer une valeur lorsqu'il quitte. Par convention, il renvoie 0 quand tout c'est bien passé et autre chose sinon.

Pour info, printf renvoie:
On success, the total number of characters written is returned.
On failure, a negative number is returned.
FrancoisGauthier Messages postés 21 Date d'inscription samedi 1 août 2009 Statut Membre Dernière intervention 20 mai 2011
20 oct. 2009 à 10:49
La valeur de retour de printf() n'est pas utilisée. Dans le cas de ce code, elle ne renverrait jamais de code erreur (sauf peut être en cas de panne du périphérique concerné: l'ecran. Comme ça ne m'est jamais arrivé, je ne suis pas sur, mais il semble que cela puisse être le cas.)
J'aurai pu utiliser puts() plutot que printf(), puisque il n'y a aucun code format en jeu. L'idée était simplement de fournir a l'utilisateur un message d'erreur simple: "Le fichier n'est pas présent a cet endroit" si le pointeur sur fichier renvoie NULL.

exit(puts("FILE NOT FOUND\n"));

// Affiche le message d'erreur à l'écran et termine le programme.
cs_tibur Messages postés 101 Date d'inscription samedi 9 février 2002 Statut Membre Dernière intervention 5 mai 2009
20 oct. 2009 à 09:07
Le truc c'est que je vois pas pourquoi tu fais un exit de la valeur de retour de printf. Voila ce que renvois printf:
Return Value
On success, the total number of characters written is returned.
On failure, a negative number is returned.

L'intérêt que ton main renvois une valeur, c'est de pouvoir identifier l'erreur. Alors pourquoi renvoyer ça ?
FrancoisGauthier Messages postés 21 Date d'inscription samedi 1 août 2009 Statut Membre Dernière intervention 20 mai 2011
20 oct. 2009 à 00:34
Il teste le pointeur sur fichier. S'il renvoi NULL, le fichier n'est pas là. Peut être aurais-je du faire une boucle pour permettre à l'utilisateur de ressaisir le chemin de fichier plutôt que de faire appel à EXIT, c'est vrai.

Merci!
cs_tibur Messages postés 101 Date d'inscription samedi 9 février 2002 Statut Membre Dernière intervention 5 mai 2009
20 oct. 2009 à 00:25
C'est quoi, l'intérêt du exit(printf("\nFILE NOT FOUND\n")); ?
Rejoignez-nous