Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > C et C++ > C

C Forum d'entraide technique sur le langage C. Avant de poster -> F.A.Q C, Sources C

Réponse
 
Outils de la discussion
Vieux 10/12/2002, 16h54   #1 (permalink)
Nouveau membre du Club
 
Date d'inscription: août 2002
Messages: 64
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 (permalink)
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 (permalink)
Nouveau membre du Club
 
Date d'inscription: août 2002
Messages: 64
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 (permalink)
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 (permalink)
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 (permalink)
Nouveau membre du Club
 
Date d'inscription: août 2002
Messages: 64
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 CFAQs CTUTORIELS CLIVRES CCOMPILATEURS CSOURCESGTK+

Réponse

Précédent   Forum des développeurs > 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
Navigation rapide