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

Messages postés
139
Date d'inscription
mardi 16 mai 2006
Statut
Membre
Dernière intervention
23 juin 2008
- - Dernière réponse : 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
Afficher la suite 

10 réponses

Meilleure réponse
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
29
3
Merci
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)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 209 internautes nous ont dit merci ce mois-ci

Commenter la réponse de coucou747
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
3
Merci
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++ (@++)<!--

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 209 internautes nous ont dit merci ce mois-ci

Commenter la réponse de SAKingdom
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
29
3
Merci
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)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 209 internautes nous ont dit merci ce mois-ci

Commenter la réponse de coucou747
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
3
Merci
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++ (@++)<!--

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 209 internautes nous ont dit merci ce mois-ci

Commenter la réponse de SAKingdom
Messages postés
139
Date d'inscription
mardi 16 mai 2006
Statut
Membre
Dernière intervention
23 juin 2008
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 209 internautes nous ont dit merci ce mois-ci

Commenter la réponse de sebastienmz
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
33
3
Merci
Salut:

FILE* stream = fopen ("source.txt", "r");
if (stream) {
    int c;
    while ((c = fgetc (stream)) != EOF) {
       putchar (c);
       sleep (50);
    }
    fclose (stream);
}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 209 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Ombitious_Developper
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
3
Merci
Évitez de lire caractère par caractère.
Lire tout d'un coup et afficher par la suite est beacoup plus rapide.

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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 209 internautes nous ont dit merci ce mois-ci

Commenter la réponse de SAKingdom
Messages postés
35
Date d'inscription
mardi 8 août 2006
Statut
Membre
Dernière intervention
28 octobre 2007
0
Merci
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  ^^
Commenter la réponse de Xenul
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
0
Merci
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
Commenter la réponse de vecchio56
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
0
Merci
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++ (@++)<!--
Commenter la réponse de SAKingdom