2010-07-05 5 views
3

Je suis en train de lire un fichier binaire. et quand il arrive à la fin. il semble qu'il soit terminé par la fonction feof(). est-ce parce qu'il n'y a pas de caractère EOF pour les fichiers binaires? si oui, comment puis-je le résoudre.lecture de fichier: feof() pour les fichiers binaires

actuellement mon code utilise une boucle while

while (!feof(f)) 

lorsqu'il atteint la fin du fichier à la position 5526900. ne s'arrête pas. ça continue à essayer de lire, et je suis coincé à la boucle. Est-ce que quelqu'un peut me dire pourquoi et comment le résoudre.?

Merci

Répondre

22

Vous ne devriez pas utiliser feof() à boucle - à la place, utiliser la valeur de retour de fread() - boucle jusqu'à ce qu'elle retourne à zéro. Ceci est facile à voir si vous envisagez de lire un fichier vide - feof() renvoie le statut EOF APRES une opération de lecture, donc il essayera toujours de lire des données fausses s'il est utilisé comme un contrôle de boucle. Je ne sais pas pourquoi tant de gens pensent que feof() (et le membre eof() des flux C++) peuvent prédire si la prochaine opération de lecture réussira, mais croyez-moi, ils ne le peuvent pas.

+0

++ bonne prise, Neil –

+0

merci. il est fonctionnel comme prévu maintenant. merci Neil. – Grey

Questions connexes