1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
#include<stdio.h>
#define ECRITURE_BINAIRE 0
#define LECTURE_BINAIRE 1
int main (void)
{
/* Test du mode binaire sous WINDOWS 2000
ecriture en mode binaire ou non binaire puis lecture en mode binaire ou non binaire
utilisation pour l ecriture de fputc et pour la lecture fgetc
Rappel: char: 10 = LF, 13 = CR, 26=SUB=ctrl+c = fin de fichier sous windows >:|
Saut de ligne sous windows = CR LF. '\n' == 10
- en mode non binaire:
1) fputc(10,F) écrit 2 chars dans F: 13 et 10...
2) de même, 2 fgetc(F) sur F pointant sur CR LF ... retournera 10 ... et non 13 10 ...
3) fgetc(F) sur F pointant sur 26 retournera EOF >:| et le pointeur F ne s'incrémente pas
- en mode binaire:
1) fputc(10,F)= écrit simplement 10 dans F
2) 2 fgetc(F) sur F pointant sur CR LF ... retournera tout bonnement 13 10
3) fgetc(F) sur F pointant sur 26 retournera 26 >:D et le pointeur F s'incrémente
note:
En mélangeant les fprintf fscanf fputc fgetc ça donne les même résultats.
fprintf(F,"%c",10)
fscanf(F,"%c",&c);
*/
FILE * F;
char c;
if (ECRITURE_BINAIRE)
{
/* Ouverture en mode binaire */
if ((F = fopen("test.txt","wb")) == NULL) printf("erreur d ouverture en ecriture\n");
}
else
{
/* Ouverture en mode non binaire */
if ((F = fopen("test.txt","w")) == NULL) printf("erreur d ouverture en ecriture\n");
}
if (fputc(10,F) == EOF) printf("erreur d ecriture\n");
if (fputc(26,F) == EOF) printf("erreur d ecriture\n");
if (fclose(F) == EOF) printf("erreur de fermeture");
if (LECTURE_BINAIRE)
{
/* lecture en mode binaire */
if ((F = fopen("test.txt","rb")) == NULL) printf("erreur d ouverture en lecture\n");
}
else
{
/* lecture en mode non binaire */
if ((F = fopen("test.txt","r")) == NULL) printf("erreur d ouverture en lecture\n");
}
if ((c = fgetc(F)) != EOF) printf("char1:%d " ,c,c);
if ((c = fgetc(F)) != EOF) printf("char2:%d ",c,c);
if ((c = fgetc(F)) != EOF) printf("char3:%d ",c,c);
if (fclose(F) == EOF) printf("erreur de fermeture");
while(1);
}
/* Resultats: (concorde avec ce que l'on attend)
ECRITURE_BINAIRE| LECTURE_BINAIRE| Console:
0 | 0 | char1:10
0 | 1 | char1:13 char2:10 char3:26
1 | 0 | char1:10
1 | 1 | char1:10 char2:26
*/ |
Partager