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.
Version imprimable
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.
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 !
Voilà un exemple que j'ai tapé
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 ????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);
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):
(extrait de la doc VC++ 5.0).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.
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.
Bonjour,
Un grand merci à tous, c'est devenu trés clair grâce à vous .
Salutations.
angi.