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

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

Répondre au sujet
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 15 déc. 2006 à 15:04
+3
Utile
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)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de coucou747
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 15 déc. 2006 à 15:15
+3
Utile
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++ (@++)<!--
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de SAKingdom
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 15 déc. 2006 à 15:19
+3
Utile
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)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de coucou747
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 15 déc. 2006 à 15:34
+3
Utile
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++ (@++)<!--
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de SAKingdom
sebastienmz 139 Messages postés mardi 16 mai 2006Date d'inscription 23 juin 2008 Dernière intervention - 15 déc. 2006 à 16:20
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de sebastienmz
Ombitious_Developper 2333 Messages postés samedi 28 février 2004Date d'inscription 26 juillet 2013 Dernière intervention - 15 déc. 2006 à 16:21
+3
Utile
Salut:

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

C++ (@++)<!--
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de SAKingdom
Xenul 35 Messages postés mardi 8 août 2006Date d'inscription 28 octobre 2007 Dernière intervention - 15 déc. 2006 à 19:27
0
Utile
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
vecchio56 6539 Messages postés lundi 16 décembre 2002Date d'inscription 22 août 2010 Dernière intervention - 15 déc. 2006 à 22:15
0
Utile
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
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 15 déc. 2006 à 23:24
0
Utile
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.