Je ne sais pas si c'est normale ou si c'est la faute de mon ordinateur, de windows .....
Mais j'ai eu de grose difficulté a utilisé les fichiers binaires.
Apres quelque recherche, prise de tete et autre essais, j'ai trouvé qu'il m'était impossible d'ecrire l'octet 25 ou 26. Donc j'ai fait une fonction qui n'ecrit pas ces octets.
J'ai fait un main montrant dans un 1er temps que l'utilisation directe des fonctions fread et fwrite (et ca ne marche pas!) et dans un 2ieme temps l'utilisation des nouvelle fonctions (et ca marche :D)
Source / Exemple :
#include <stdio.h>
#define N1 0
#define N2 1000000
bool Write_Fichier(FILE *fichier, void *data, size_t nb_byte)
{
char *conversion;
conversion=(char *) data;
int i;
char byte;
for(i=0;i< (int) nb_byte;i++)
{
switch( conversion[i] )
{
case 25:
byte=27;
if(fwrite(&byte,sizeof(char),1,fichier)<1) return false;
byte=27;
if(fwrite(&byte,sizeof(char),1,fichier)<1) return false;
break;
case 26:
byte=27;
if(fwrite(&byte,sizeof(char),1,fichier)<1) return false;
byte=28;
if(fwrite(&byte,sizeof(char),1,fichier)<1) return false;
break;
case 27:
byte=27;
if(fwrite(&byte,sizeof(char),1,fichier)<1) return false;
byte=29;
if(fwrite(&byte,sizeof(char),1,fichier)<1) return false;
break;
default:
byte=conversion[i];
if(fwrite(&byte,sizeof(char),1,fichier)<1) return false;
break;
}
}
return true;
}
bool Read_Fichier(FILE *fichier, void* data, size_t nb_byte)
{
char *conversion;
conversion=(char*) data;
int i;
char byte;
for(i=0;i<(int) nb_byte;i++)
{
if(fread(&byte,sizeof(char),1,fichier)<1) return false;
switch( byte)
{
case 27:
if(fread(&byte,sizeof(char),1,fichier)<1) return false;
conversion[i]=byte-2;
break;
default:
conversion[i]=byte;
break;
}
}
return true;
}
int main(int argc, char* argv[])
{
printf("Hello World!\n");
int i;
int temp;
FILE *fichier;
printf("UTILISATION DIRECTE DES FICHIERS BINAIRES\n");
printf("ecriture d'entier de %i a %i\n",N1,N2);
fichier=fopen("./truc","w");
for(i=N1;i<N2;i++)
{
fwrite(&i, sizeof(int),1,fichier);
}
fclose(fichier);
printf("lecture des entier\n");
fichier=fopen("./truc","r");
for(i=N1;i<N2;i++)
{
if(fread(&temp,sizeof(int),1,fichier)<1)
{ printf("probleme fichier, nombre a lire: %i nombre lut : %i \n",i,temp);
break;
}
if(temp!=i)
{ printf("probleme nombre, nombre a lire: %i nombre lut : %i \n",i,temp);
break;
}
}
fclose(fichier);
printf("\n\n\nUTILISATION DES NOUVELLES FONCTIONS\n");
printf("ecriture d'entier de %i a %i\n",N1,N2);
fichier=fopen("./truc","w");
for(i=N1;i<N2;i++)
{
Write_Fichier(fichier, &i, sizeof(int));
}
fclose(fichier);
printf("lecture\n");
fichier=fopen("./truc","r");
for(i=N1;i<N2;i++)
{
if(Read_Fichier(fichier,&temp, sizeof(int))==false)
{ printf("probleme fichier, nombre a lire: %i nombre lut : %i \n",i,temp);
break;
}
if(temp!=i)
{ printf("probleme nombre, nombre à lire: %i nombre lut : %i \n",i,temp);
break;
}
}
fclose(fichier);
printf("\nfin\n");
return 0;
}
Conclusion :
En esperant que si vous avez le meme probleme, vous economiserez une journée de boulot!
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.