Lire un fichier et l'afficher

Résolu
sebastienmz
Messages postés
139
Date d'inscription
mardi 16 mai 2006
Statut
Membre
Dernière intervention
23 juin 2008
- 15 déc. 2006 à 14:58
SAKingdom
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
- 15 déc. 2006 à 23:24
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

coucou747
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Membre
Dernière intervention
30 juillet 2012
41
15 déc. 2006 à 15:04
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)
3
SAKingdom
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
15 déc. 2006 à 15:15
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++ (@++)<!--
3
coucou747
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Membre
Dernière intervention
30 juillet 2012
41
15 déc. 2006 à 15:19
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)
3
SAKingdom
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
15 déc. 2006 à 15:34
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++ (@++)<!--
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sebastienmz
Messages postés
139
Date d'inscription
mardi 16 mai 2006
Statut
Membre
Dernière intervention
23 juin 2008

15 déc. 2006 à 16:20
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
3
Ombitious_Developper
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
37
15 déc. 2006 à 16:21
Salut:

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

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

15 déc. 2006 à 19:27
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  ^^
0
vecchio56
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
15 déc. 2006 à 22:15
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
0
SAKingdom
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
15 déc. 2006 à 23:24
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++ (@++)<!--
0