IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

lire la totalité d'un fichier


Sujet :

C

  1. #1
    maz
    maz est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2002
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 18
    Points : 16
    Points
    16
    Par défaut lire la totalité d'un fichier
    Bonjour,

    Je souhaiterai lire la totalité d'un fichier et pour cela on peut utiliser fread mais le problème c'est qu'il faut le nombre d'élement contenu dans le fichier ce qui n'est pas connu dans mon cas ... existe t'il une fonction permettant de faire cela ???
    Merci,

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par maz
    Je souhaiterai lire la totalité d'un fichier
    Tu veux dire charger entièrement en mémoire ? C'est rarement utile. Si tu y tiens...
    et pour cela on peut utiliser fread mais le problème c'est qu'il faut le nombre d'élement contenu dans le fichier ce qui n'est pas connu dans mon cas ... existe t'il une fonction permettant de faire cela ???
    Non, mais on peut la construire à coup de fread() et de malloc()/realloc()...

    Il n'y a aucune garantie qu'un fichier puisse être intégralement chargé en mémoire (souvent, un fichier peut être plus gros que la mémoire).
    Pas de Wi-Fi à la maison : CPL

  3. #3
    maz
    maz est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2002
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 18
    Points : 16
    Points
    16
    Par défaut petites précision
    Je suis débutant et j'avoue ne pas m'en sortir ...
    J'ouvre un fichier en utilisant la ligne suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newfile = fopen("path\\log_file","w+");
    je veux ecrire dedans en utilisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void write_str_file (char* message)
    {
       int size_l = strlen (message); 
       int size_elemnt = strlen ("a");
       fwrite (message, size_elemnt, size_l, file);
    }
    et je souhaite mettre les elemnts du fichier dans un string en utilisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    char *read_str_file ()
    {
       static char* flux;
       int size_elmt = strlen ("a");
       int size_file = fsize (Logfile)/size_elmt;
       fread (flux,size_elmt,size_file,Logfile);
    }
    où fsize :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    long  fsize(FILE* fd)
    {
       long size;
       fseek(fd, 0, SEEK_END);       /* aller en fin */
       size = ftell(fd);             /* lire la taille */
       return size;
    }
    Je me doute qu'il ya des erreurs...
    Pourriez vous me donner des conseils pour que cela marche ?

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par maz
    Je suis débutant et j'avoue ne pas m'en sortir ...
    J'ouvre un fichier en utilisant la ligne suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newfile = fopen("path\\log_file","w+");
    Bravo, tu viens de tuer ton fichier.

    Pourquoi "w+" ? Pour lire, on utilise "r", non ? Tu n'as pas de livre de C ? Ce sont des connaissances élémentaires...
    je veux ecrire dedans en utilisant:
    Fais pas le malin. Dans ton premier post tu dis en substance :
    Je souhaiterai lire la totalité d'un fichier
    alors décide toi, parce que je n'ai pas que ça à faire.

    Pose ton problème clairement avec des phrases simples et lisibles. Le jour où ton problème sera clairement spécifié, on envisagera une manière de le résoudre.
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    fread() lit tout !!!
    Il faut juste que ta mémoire soit suffisante pour tout stocker. Il va aussi te falloir une variable pour savoir où tu en es de ta mémoire et faire des realloc si nécessaire.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  6. #6
    Membre confirmé Avatar de Lunixinclar
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 416
    Points : 489
    Points
    489
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Tu veux dire charger entièrement en mémoire ? C'est rarement utile. Si tu y tiens...
    Privilégier les appels I/O aux appels système... Telle est la question. Par exemple grep fonctionne en mode bufferisé, et il cartonne. Un excellent article sur le sujet (en anglais hélas) http://www.cs.utk.edu/~plank/plank/c...t/lecture.html

    Citation Envoyé par maz
    Pourriez vous me donner des conseils pour que cela marche ?
    Commences par faire un tour ici http://www.cplusplus.com/ref/cstdio/ Il faut tout lire.

Discussions similaires

  1. [DOM] Meilleure facçon de lire et d'écrire un fichier XML
    Par newfsch dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 12/05/2004, 11h17
  2. [Debutant] Comment lire la taille d'un fichier binaire ?
    Par Invité dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 18/12/2003, 20h20
  3. Lire un attribut dans un fichier XML en C++
    Par ti.k-nar dans le forum XML
    Réponses: 2
    Dernier message: 14/10/2002, 16h22
  4. Réponses: 5
    Dernier message: 20/08/2002, 19h01
  5. Lire 1 bit d'un fichier en C
    Par Anonymous dans le forum C
    Réponses: 3
    Dernier message: 23/05/2002, 19h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo