comment connaitre la fin d'un fichier avec des fonctions de bas niveau - C - Programmation
Marsh Posté le 24-11-2012 à 21:47:46
Vous avez plusieurs façons de le faire :
* Soit vous récupérez la taille du fichier avant toute action (fonction stat (Linux) ou _statXXX (Windows)) et vous vous en servez dans votre traitement,
* Si vous avez ouvert le fichier avec fopen, allez à la fin avec fseek(fich, 0, SEEK_END), puis ftell vous dit la position, ou, plus simple, vous utilisez la fonction feof
* Si vous avez ouvert le fichier avec open, à part le fait que le read ne renvoie plus rien (code de retour égal à 0), je ne vois pas ... Si quelqu'un d'autre sait ...
Marsh Posté le 24-11-2012 à 21:56:31
oui j'avais pensé à fseek, je me demandais si "seek" existait mais j'ai cherché sans résultat.
pour la première solution je suis pas sur d'avoir le droit de m'en servir.
mon fichier ne se termine pas par '\0' par hasard ? vu que c'est un fichier texte..
Marsh Posté le 24-11-2012 à 22:02:15
Benh_31 a écrit : Bonsoir à tous, je suis en 2ieme année d'IUT informatique et j'ai un exercice sur les fichiers à faire où je dois me servir que de fonctions de bas niveau. J'ai besoin dans mon programme de tester si je me trouve à la fin de mon fichier ou non, mais sans EOF je sais pas comment faire :s avez vous une idée ? merci d'avance. |
Si tes "fonctions de bas niveau", c'est l'interface Unix des fichiers (open, read, write, close), la convention Unix est qu'on est à la fin du fichier quand read retourne 0 (autrement dit, ne lit rien mais ne retourne pas d'erreur non plus).
En passant, feof ne dit pas si on est a la fin du fichier, elle indique si un flag est mis qui indique que la fin du fichier a été atteinte. Le moyen correct de s'en servir, c'est de lire jusqu'à avoir une erreur puis tester feof pour savoir si c'est la fin du fichier la cause de l'erreur ou autre chose (problème de formatage ou problème d'IO).
Marsh Posté le 25-11-2012 à 17:29:31
J'ai toujours eu horreur de cette solution utilisant ftell et on trouve quelques bonnes raisons ici ... Le site en question propose aussi une meilleure méthode pour trouver cette information.
Edit : la principale raison pour laquelle je n'aime pas ca est que ftell est censé retourner un long int, et sur un os 32bits, cette solution peut ne pas fonctionner si le fichier fait plus de 2Go ...
Marsh Posté le 25-11-2012 à 17:53:17
ahah ^^ je me soucie pas trop de ça à mon niveau ^^ c'est que des petits programmes qu'on doit faire
Marsh Posté le 24-11-2012 à 20:56:58
Bonsoir à tous,
je suis en 2ieme année d'IUT informatique et j'ai un exercice sur les fichiers à faire où je dois me servir que de fonctions de bas niveau.
J'ai besoin dans mon programme de tester si je me trouve à la fin de mon fichier ou non, mais sans EOF je sais pas comment faire :s
avez vous une idée ? merci d'avance.