Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2717 connectés 

  FORUM HardWare.fr
  Programmation
  C

  pb d'EOF

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

pb d'EOF

n°1593949
bizu53
Posté le 31-07-2007 à 20:01:49  profilanswer
 

Bonjour
Dans un programme que je voudrais faire j'aurais besoin de parcourir tout un fichier (quelconque). Je voulais donc faire comme ça :
 

Code :
  1. int fonction(char *fichier)
  2. {
  3.     char c;
  4.     FILE *fpR, *fpW;
  5.     ...
  6.     fpR = fopen(fichier, "r" );
  7.     while((c = fgetc(fpR)) != EOF)
  8.         printf("%c", c);
  9.     fclose(fpR);
  10.     ...
  11. }


 
Ça marche très bien quand le fichier est un fichier txt, mais dès que je lui donne un rar, zip, jpg, ou autre.. à "manger" il trouve des EOF en milieu de fichier et ne parcourt donc pas tout le fichier... Je ne sais pas comment faire autrement car je ne comprends pas le problème ... alors je poste sur ce forum en espérant que quelqu'un ait une idée.
 
Merci d'avance

mood
Publicité
Posté le 31-07-2007 à 20:01:49  profilanswer
 

n°1593970
tpierron
Posté le 31-07-2007 à 20:49:04  profilanswer
 

Ha, ha, erreur de débutant. fgetc retourne un int pas un char.

n°1593974
bizu53
Posté le 31-07-2007 à 20:56:07  profilanswer
 

tpierron a écrit :

Ha, ha, erreur de débutant. fgetc retourne un int pas un char.


 
Non ça ne change rien au problème...
Il y a exactement le même problème avec ça :
 
    int longueur = 0;
 
    fpR = fopen(fichier, "r" );
    while(fgetc(fpR) != EOF)
        longueur++;
    fclose(fpR);

n°1593982
bjone
Insert booze to continue
Posté le 31-07-2007 à 21:03:06  profilanswer
 

tu avais bien le bug du char/int.
 
maintenant ptet qu'avec un "rb" ça marchera mieux :)
 
et un test de fpR est le bienvenu pour se débarasser du crash quand le 'fichier' n'existe pas.

n°1593993
bizu53
Posté le 31-07-2007 à 21:14:59  profilanswer
 

bjone a écrit :

tu avais bien le bug du char/int.
 
maintenant ptet qu'avec un "rb" ça marchera mieux :)
 
et un test de fpR est le bienvenu pour se débarasser du crash quand le 'fichier' n'existe pas.


 
Par rapport à ce qu'a dit tpierron : je suis bien loin d'être débutant... J'ai bien sûr essayer plein de choses avant de venir poster, dont le mode "rb" ... le problème est toujours là avec. Avec ce mode il lit le fichier un peu plus loin que précédemment mais pas jusqu'au bout quand même.
 
Et pour le test de fpR je le fais avant l'appel de la fonction dans la main.
 
Je ne comprends absolument pas le problème
(au passage pour le int/char, ça passe très bien si on n'a pas besoin des caractères de code supérieur à 256 :) )

n°1594006
Un Program​meur
Posté le 31-07-2007 à 21:26:07  profilanswer
 

fgetc renvoie un int qui contient ou un char convertit en unsigned char (généralement de 0 à 255) ou EOF (qui est négatif, généralement -1).  Si tu convertis le résultat de fgetc en char avant de comparer avec EOF, deux cas sont possibles:
 
char est signé: la lecture d'un caratère de code EOF (généralement ÿ) va être mépris pour EOF.
char est non signé et on boucle indéfiniment.
 
Si on n'ouvre pas un fichier binaire avec rb, alors il y peu y avoir des conversions (par exemple paire CR/LF en \n) et CTRL-Z est parfois détecté comme fin de fichiers.

n°1594017
bizu53
Posté le 31-07-2007 à 21:52:19  profilanswer
 

Je pensais que ça ne mènerait à rien mais finalement j'ai fait afficher ce qu'il lit (sans condition de fin de lecture).
Déjà il n'y a qu'en mode "rb" qu'il peut le lire entièrement (en mode "r" il y a rapidement plein de -1).
Donc je me fixe sur le "rb"...
 
Mais le problème maintenant est comment trouver la (vraie) fin du fichier?... parce que des caractères détectés comme fin de fichier sont dans le contenu.
 
Je n'ai pas d'idée... si vous en avez faites-en moi part. (J'ai pensé à arrêter la lecture lors de plusieurs -1 à la suite, mais le pb c'est qu'il se peut qu'il y ait des plages de -1 dans mes fichiers)

n°1594020
Un Program​meur
Posté le 31-07-2007 à 21:59:52  profilanswer
 

Code :
  1. int fonction(char *fichier)
  2. {
  3.    int c;
  4.    FILE *fpR;
  5.     fpR = fopen(fichier, "rb" );
  6.     while((c = fgetc(fpR)) != EOF)
  7.        printf("%c", c);
  8.     fclose(fpR);
  9. }

n°1594022
bizu53
Posté le 31-07-2007 à 22:04:12  profilanswer
 

Un Programmeur a écrit :

Code :
  1. int fonction(char *fichier)
  2. {
  3.    int c;
  4.    FILE *fpR;
  5.     fpR = fopen(fichier, "rb" );
  6.     while((c = fgetc(fpR)) != EOF)
  7.        printf("%c", c);
  8.     fclose(fpR);
  9. }



 
Déjà fait depuis longtemps...
Ça ne marche pas chez moi, il trouve une fin de fichier avant la fin du fichier...

n°1594030
bizu53
Posté le 31-07-2007 à 22:14:27  profilanswer
 

euh au temps pour moi, ça passe bien :) je ne sais pas ce que j'avais fait mais ça ne passait pas tout à l'heure
 
Merci quand même, je pense que je ne serais pas revenu sur ces 2 lignes si tu ne les avais pas repostées

mood
Publicité
Posté le 31-07-2007 à 22:14:27  profilanswer
 

n°1594034
bizu53
Posté le 31-07-2007 à 22:19:01  profilanswer
 

En continuant mon programme je viens de voir ce que j'ai fait :p je l'avais fait mais pas au bon endroit (un autre endroit très ressemblant, mais qui se passe après, donc je n'avais pas vu qu'en fait ça fonctionnait bien) lol
 
Merci bien

n°1594063
Sve@r
Posté le 31-07-2007 à 23:13:50  profilanswer
 

bizu53 a écrit :

Par rapport à ce qu'a dit tpierron : je suis bien loin d'être débutant...
...En continuant mon programme je viens de voir ce que j'ai fait :p je l'avais fait mais pas au bon endroit (un autre endroit très ressemblant, mais qui se passe après, donc je n'avais pas vu qu'en fait ça fonctionnait bien) lol


Bon ben apparemment t'es quand-même un peu débutant... ;)  
 
 
 
 


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1594067
bizu53
Posté le 31-07-2007 à 23:17:51  profilanswer
 

après tout dépend ce qu'on appelle être débutant alors, c'est juste une connerie j'avais pas bien fait gaffe :p (pour ma part ça fait 7ans que je programme donc 2 en C) ;-)

n°1594068
bizu53
Posté le 31-07-2007 à 23:18:20  profilanswer
 
n°1594147
matafan
Posté le 01-08-2007 à 07:58:14  profilanswer
 

Y'en a qui restent débutants longtemps :P

n°1594578
Sve@r
Posté le 01-08-2007 à 18:48:19  profilanswer
 


T'es aussi un débutant sur ce fofo. Au lieu de créer un nouveau post pour rectifier une erreur sur le post précédent tu peux directement éditer ledit post pour le rectifier...   :p
 

matafan a écrit :

Y'en a qui restent débutants longtemps :P


Et dans beaucoup d'endroits  :p  
 


Message édité par Sve@r le 01-08-2007 à 18:50:00

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  pb d'EOF

 

Sujets relatifs
getchar et EOF[c/c++] lire des lignes en boucle jusqu'a EOF
[C++]{debutant}EOF après l'EOF? Oda?probleme avec fscanf et EOF
Pb avec EOF dans boucleVB 6 / Probleme EOF
Comment transmettre "EOF" à un programme à partir du clavier[PHP] Aide pour compréhension du code.... <<<EOF ??
ERREUR : <<<EOF syntaxe PHP avec guillemets doublés !!!!EOF sous delphi
Plus de sujets relatifs à : pb d'EOF


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)