Salut à tous
Je dois programmer une routine qui lis tous les caractères un après l'autre dans un fichier.
Ce fichier ça peut être n'importe quel fichier, y compris des fichiers qui peuvent contenir le caractère ascii de code 0 (caractère nul ou \0, ce qui arrive souvent d'ailleurs).
Le problème c'est que avec les primitives fopen et compagnie, c'est interpreté comme la fin du fichier, donc ça le lis pas jusqu'à la fin si il rencontre ce foutu caractère avant.
Je sais pas comment faire pour lire un fichier qui contient ces caractères dans ce cas.
Quelqu'un a une idée ?
Merci
1. Tu ouvres le fichier en mode binaire.
2. Tu utilises fread, pas fgets.
Mais c exactement ce que je fais, regarde :
char buf[1];
FILE* fd;
if( (fd = fopen("C:\temp.tmp", "rb")) == NULL )
MessageBox(0,"Erreur lors de l'ouverture du fichier","Erreur",MB_OK | MB_ICONEXCLAMATION);
else
{
for(long i=0;i<longueur;i++)
{
if (fread(buf,1,1,fd))
tableau[buf[0]]++;
}
fclose(fd);
}
Tu peux tester en mettant un caractère nul dans un fichier avant la fin, il le lira pas, enfin là en tout cas ça marche pas.
ok merci bcp Orion, je vais tester dès que possible
juste une précision à propos du code que tu ne comprennais pas (tableau[buf[0]]++), c'est en fait une routine qui est censée lire dans un fichier caractère par caractère et incrémenter, puis incrémenter dans un tableau de 255 caractères la valeur correspondant au code ascii du caractère :
caractère -> code Ascii -> tableau[codeAscii]++ avec tableau de type long* qui pointe sur un tableau de 255 long