pb d'EOF - C - Programmation
Marsh Posté le 31-07-2007 à 20:49:04
ReplyMarsh Posté le 31-07-2007 à 20:56:07
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);
Marsh Posté le 31-07-2007 à 21:03:06
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.
Marsh Posté le 31-07-2007 à 21:14:59
bjone a écrit : tu avais bien le bug du char/int. |
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 )
Marsh Posté le 31-07-2007 à 21:26:07
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.
Marsh Posté le 31-07-2007 à 21:52:19
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)
Marsh Posté le 31-07-2007 à 21:59:52
Code :
|
Marsh Posté le 31-07-2007 à 22:04:12
Un Programmeur a écrit :
|
Déjà fait depuis longtemps...
Ça ne marche pas chez moi, il trouve une fin de fichier avant la fin du fichier...
Marsh Posté le 31-07-2007 à 22:14:27
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
Marsh Posté le 31-07-2007 à 22:19:01
En continuant mon programme je viens de voir ce que j'ai fait 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
Marsh Posté le 31-07-2007 à 23:13:50
bizu53 a écrit : Par rapport à ce qu'a dit tpierron : je suis bien loin d'être débutant... |
Bon ben apparemment t'es quand-même un peu débutant...
Marsh Posté le 31-07-2007 à 23:17:51
après tout dépend ce qu'on appelle être débutant alors, c'est juste une connerie j'avais pas bien fait gaffe (pour ma part ça fait 7ans que je programme donc 2 en C) ;-)
Marsh Posté le 01-08-2007 à 07:58:14
ReplyMarsh Posté le 01-08-2007 à 18:48:19
bizu53 a écrit : *dont 2 |
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...
matafan a écrit : Y'en a qui restent débutants longtemps |
Et dans beaucoup d'endroits
Marsh Posté le 31-07-2007 à 20:01:49
Bonjour
Dans un programme que je voudrais faire j'aurais besoin de parcourir tout un fichier (quelconque). Je voulais donc faire comme ça :
Ç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