comment connaitre la fin d'un fichier avec des fonctions de bas niveau

comment connaitre la fin d'un fichier avec des fonctions de bas niveau - C - Programmation

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.

Reply

Marsh Posté le 24-11-2012 à 20:56:58   

Reply

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 ... :)

Reply

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..


Message édité par Benh_31 le 24-11-2012 à 21:58:38
Reply

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).


Message édité par Un Programmeur le 24-11-2012 à 22:04:23

---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 24-11-2012 à 23:01:39    

super :) je vais tester ça dessuite

Reply

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 ...


Message édité par theshockwave le 25-11-2012 à 17:32:43

---------------
last.fm
Reply

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 :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed