Précédent   Forum des professionnels en informatique > C et C++ > C
C Forum d'entraide technique sur le langage C. Avant de poster -> F.A.Q C, Sources C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 10/12/2002, 16h54   #1
Nouveau membre du Club
 
Date d'inscription: août 2002
Messages: 69
Par défaut différence entre le mode binaire et mode texte de fopen()

Bonjour,

Quel est la différence entre ouvir un fichier en mode binaire et en mode texte ? Si je lis 1 caractère dans ce fichier sa représentation binaire sera la même que sa valeur entière ? Ou est ce plus complexe que ça ?


merci à tous .



angi.
Angelico est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 10/12/2002, 17h03   #2
Invité de passage
 
Date d'inscription: décembre 2002
Messages: 2
Envoyer un message via ICQ à dingosid
Par défaut

Le fait d'ouvrir un fichier en mode 'texte' implique que ton fichier contienne des caractère alors q'une ouverture en binaire correspond à une simple suite d'octet !

C'est un peu en fonction de ton OS. En réalité Unix ne contient que des fichiers en mode binaire (au niveau physique) alors que le DOS fait la distinction !

Par conséquent, à moins d'utiliser des formats de fichiers particuliers, je te conseille vivement d'utiliser le mode texte !
dingosid est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 10/12/2002, 17h20   #3
Nouveau membre du Club
 
Date d'inscription: août 2002
Messages: 69
Par défaut

Voilà un exemple que j'ai tapé
Code :
char var;
int taille=0;
FILE *out, *in;
clrscr();
struct stat structinfo;
stat("test.exe", &structinfo);
taille = structinfo.st_size;
out= fopen("test.exe", "r");
in= fopen("dest.exe","w");
for (int i=0; i< taille; i++)
    {
    fread(&var,1,1,out);
    fwrite(&var,1,1,in);
    }
    fclose(in);
    fclose(out);
 
Dans cet exemple j'ouvre 2 exe test et dest (out et in). Lorsque je lis un caractère que j'écris par la suite dans IN il me lit 1 octet qu'il est censé écrire dans OUT. Supposons que la valeur de l'octet lu soit 54 il est censé m'écrire 54 dans mon fichier destination, hors il m'écris tout sauf 54 ? Et ce qui à la base est un prog (sous dos test.exe) en finale me donne dest.exe qui plante lors du lancement . Je comprend que le problème dépend du mode binaire ou texte mais pourquoi 54 représentant un caractère quelconque, bah en binaire il s'écrit pas 54 ????
Angelico est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 11/12/2002, 00h07   #4
Nouveau membre du Club
 
Date d'inscription: décembre 2002
Messages: 65
Envoyer un message via ICQ à golem Envoyer un message via MSN à golem
Par défaut

Salut,

Le fait d'ouvrir un fichier en mode texte, réinterprète le flux en supprimant certains caractères ou encore interprète un caractère spécial comme une fin de fichier (EOF):

Citation:
t Open in text (translated) mode. In this mode, CTRL+Z is interpreted as an end-of-file character on input. In files opened for reading/writing with "a+", fopen checks for a CTRL+Z at the end of the file and removes it, if possible. (...)

Also, in text mode, carriage return–linefeed combinations are translated into single linefeeds on input, and linefeed characters are translated to carriage return–linefeed combinations on output. (...)

b Open in binary (untranslated) mode; translations involving carriage-return and linefeed characters are suppressed.
(extrait de la doc VC++ 5.0).
golem est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 11/12/2002, 02h36   #5
Membre du Club

 
Date d'inscription: juin 2002
Messages: 95
Par défaut

En mode texte, certains caractères sont traduits dans un sens à l'écriture, puis dans l'autre à la lecture.
Exemple:
\n écrit devient \n\r dans le fichier.
\n\r lu devient \n en mémoire.

C'est source de nombreuses prises de têtes et non-portabilités.
__________________
"J'ai toujours rêvé d'un ordinateur qui soit aussi facile à utiliser qu'un téléphone. Mon rêve s'est réalisé : je ne sais plus comment utiliser mon téléphone."-Bjarne Stroustrup
www.stroustrup.com
Musaran est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 11/12/2002, 12h31   #6
Nouveau membre du Club
 
Date d'inscription: août 2002
Messages: 69
Par défaut

Bonjour,

Un grand merci à tous, c'est devenu trés clair grâce à vous .


Salutations.


angi.
Angelico est déconnecté   Envoyer un message privé Réponse avec citation
NEWS CFAQ CTutoriels CLivres CCompilateurs et outils CSources CBibliothèques CGTK+

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > C et C++ > C



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 14h44.


Vos questions techniques : forum d'entraide C - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.