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, Avant de poster.
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
Membre du Club
 
Inscription : août 2002
Messages : 70
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 70
Points : 43
Points : 43
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 00
Vieux 10/12/2002, 17h03   #2
Invité de passage
 
Inscription : décembre 2002
Messages : 2
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 2
Points : 2
Points : 2
Envoyer un message via ICQ à dingosid
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 00
Vieux 10/12/2002, 17h20   #3
Membre du Club
 
Inscription : août 2002
Messages : 70
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 70
Points : 43
Points : 43
Voilà un exemple que j'ai tapé
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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 00
Vieux 11/12/2002, 00h07   #4
Membre régulier
 
Inscription : décembre 2002
Messages : 65
Détails du profil
Informations forums :
Inscription : décembre 2002
Messages : 65
Points : 72
Points : 72
Envoyer un message via ICQ à golem Envoyer un message via MSN à golem
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 00
Vieux 11/12/2002, 02h36   #5
Membre habitué

 
Inscription : juin 2002
Messages : 97
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 97
Points : 105
Points : 105
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 00
Vieux 11/12/2002, 12h31   #6
Membre du Club
 
Inscription : août 2002
Messages : 70
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 70
Points : 43
Points : 43
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 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 21h13.


 
 
 
 
Partenaires

Hébergement Web