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

Messages postés
139
Date d'inscription
mardi 16 mai 2006
Dernière intervention
23 juin 2008
- - Dernière réponse : SAKingdom
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
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 

Votre réponse

10 réponses

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

Merci coucou747 3

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

Codes Sources a aidé 97 internautes ce mois-ci

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

Merci SAKingdom 3

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

Codes Sources a aidé 97 internautes ce mois-ci

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

Merci coucou747 3

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

Codes Sources a aidé 97 internautes ce mois-ci

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

Merci SAKingdom 3

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

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de SAKingdom
Messages postés
139
Date d'inscription
mardi 16 mai 2006
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

Merci sebastienmz 3

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

Codes Sources a aidé 97 internautes ce mois-ci

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

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

Merci Ombitious_Developper 3

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

Codes Sources a aidé 97 internautes ce mois-ci

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

Merci SAKingdom 3

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

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de SAKingdom
Messages postés
35
Date d'inscription
mardi 8 août 2006
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
6539
Date d'inscription
lundi 16 décembre 2002
Dernière intervention
22 août 2010
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
3213
Date d'inscription
lundi 7 novembre 2005
Dernière intervention
16 février 2009
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.