Lire un fichier et l'afficher [Résolu]

Signaler
Messages postés
139
Date d'inscription
mardi 16 mai 2006
Statut
Membre
Dernière intervention
23 juin 2008
-
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
-
bonjour j'ai un problème comme d'habitude mais la c'est bizzard je veux juste afficher le contenu d'un fichier .txt mais cela maffiche que les 8 premiers octets!
voila mon code :

  entree = fopen (fichier, "r"); 
  if (entree == NULL){
    addlog("impossible d'ouvrire le fichier",1);          
  }
  while (1) {
      fscanf (entree , "%c", &mot);
      if (feof (entree)){
        sleep(300);
        printf("\n Fini!");
        break; 
       } else {
         printf("%c", mot);
       }
  
   }
   close (entree);

___________
Sébastien Metthez
www.sebastien-metthez.com

10 réponses

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
Salut,

je nne vois pas de problème à première lecture, mais :

  if (entree == NULL){
    addlog("impossible d'ouvrire le fichier",1);          
  }

tu devrais ajouter un return ERR, ou un exit(0); ou un truc du genre...
de plus, tu ne fais pas de vérification sur close,
et ton fichier doit comporter au minimum un octet pour que ça marche...

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Quand on peut, ne pas lire caractère par caractère:


FILE *entree = fopen (fichier, "r");


char *buffer;


int len;



if (!entree) return 0;



len = _lseek(entree->_file, 0, SEEK_END);


_lseek(entree->_file, 0, SEEK_SET);



buffer = (char*)malloc(len+1);


if(!buffer) goto closefile;


if(fread(buffer, 1, len, entree) != len) goto exit;



buffer[len] = 0;



printf("%s\n", buffer);

 


exit:


free(buffer);

closefile:


fclose (entree);



Ne pas oublier d'ajouter #include pour _lseek

C++ (@++)<!--
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
38
Salut,

goto exit;

faudrait éviter ça.... c'est pas joli joli les goto

In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Il n'y a rien de bien méchand la dedans. Ça évite de mettre des free et fclose partout dans le code quand un seul peut faire l'affaire.

C++ (@++)<!--
Messages postés
139
Date d'inscription
mardi 16 mai 2006
Statut
Membre
Dernière intervention
23 juin 2008

voila en fait mon problème vien d'une autre procèdure :S mais c'est bon ça marche

___________
Sébastien Metthez
www.sebastien-metthez.com
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
35
Salut:

FILE* stream = fopen ("source.txt", "r");
if (stream) {
    int c;
    while ((c = fgetc (stream)) != EOF) {
       putchar (c);
       sleep (50);
    }
    fclose (stream);
}
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Évitez de lire caractère par caractère.
Lire tout d'un coup et afficher par la suite est beacoup plus rapide.

C++ (@++)<!--
Messages postés
35
Date d'inscription
mardi 8 août 2006
Statut
Membre
Dernière intervention
28 octobre 2007

Dans le cas d'une lecture simple certes, mais pour la lecture d'un fichier de conf ayant besoin d'un traitement des données par exemple, c'est mieu  ^^
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
sebastienmz> Réponse acceptée sert à indiquer qu'un message précis t'a aidé a résoudre ton problème (afin de faciliter les recherches par la suite aux gens qui ont le mêm problème).
On perd tout l'intérêt de ce système si tu accepte toutes les réponses

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Xenul >> Peut importe le cas, il est toujours mieu de tout lire
d'un coup et d'effectuer les traitements, modification etc. dans le
buffer directement (ou par sections si le fichier est trop gros) et, si
besoin, remettre dans le fichier.
Vous serai s'en doute tous d'accord pour dire qu'il est beaucoup plus rapide de se déplacer en mémoire que de déplacer la tête de lecture/écriture du disque et on évite aussi bien des opérations inutiles.
Évidament, pour un fichier de 5 ou 6 octects, on s'en passera
bien mais je n'est jamais vue un fichier si petit.

C++ (@++)<!--