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 :

Bufferiser un fichier en une fois.


Sujet :

C

  1. #1
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut Bufferiser un fichier en une fois.
    Salut!

    Pour bufferiser un fichier j'utilise "fgets", mais cette fonction lit ligne par ligne.
    Existe il une fonction qui lise un fichier en un bloc et le stocke directement dans une grande chaine de caractère par exemple?

    Merci de votre aide.

  2. #2
    Membre chevronné Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Par défaut
    Il faut ouvrir le fichier en mode binaire, puis lire avec fread.

  3. #3
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Citation Envoyé par Mayti4
    Il faut ouvrir le fichier en mode binaire, puis lire avec fread.
    OK mais "fread" demande le nombre d'octets à lire.
    Si je met 1000 pour un fichier de 100 octets est-ce que cela posera problème?

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    La méthode est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    char *p;
    size_t len;
    f = fopen("toto.txt", "r");
    // il faut tester f, je passe la-dessus
    // on se positionne en fin de fichier
    fseek(f, 0l, SEEK_END);
    // on lit la taille
    len = ftell(f);
    // on revient en début de fichier
    fseek(f, 0l, SEEK_SET);
    // on alloue len + 1 pour le zéro terminal
    if ((p = malloc(len+1)) != NULL)
    {
      size_t len1;
      len1 = fread(p, 1, len, f) ;
      p[len1] = 0;
      if (len1 != len)
      {
         fprintf(stderr, "Pb lecture fichier\n");
      }
    }
    else
    {
       fprintf(stderr, "Pb alloc mémoire\n");
        return;
    }
    fclose(f);
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Membre chevronné Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Par défaut
    Citation Envoyé par seriousme
    OK mais "fread" demande le nombre d'octets à lire.
    Si je met 1000 pour un fichier de 100 octets est-ce que cela posera problème?
    Non, tu auras 100 octets dans ton buffer.

  6. #6
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    OK ça m'a l'air propre et efficace.
    Sinon à la "bourrin" en mettant trop d'octets à lire pour "fread" ça pose problème ou est-ce que je récupère quand même ce qui est lu?

    EDIT : Mayti4 => OK merci, ce n'est pas une méthode élégante mais elle tient en une ligne.

  7. #7
    Membre éclairé
    Inscrit en
    Août 2005
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 89
    Par défaut
    comme le dit mayti4, il n'y a pas de pb. Pour préciser, fread() te renvoie le nombre d'objets effectivement lus (qui peut être inférieur à celui demandé)

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par seriousme
    OK mais "fread" demande le nombre d'octets à lire.
    Si je met 1000 pour un fichier de 100 octets est-ce que cela posera problème?
    Non. fread() retourne le nombre de blocs lus. Ajouter le 0 final à la main et prévoir la place nécessaire...

  9. #9
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Sous linux, pour connaitre la taille d'un fichier, j'utilise stat()

    man 2 stat

  10. #10
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Ok merci de toutes vos réponses.

    C'est .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Ouverture d'un fichier excel une fois la session ouverte
    Par nassiri dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/11/2013, 22h59
  2. Réduction fichier log une fois par mois
    Par ozzy75 dans le forum Administration
    Réponses: 4
    Dernier message: 28/01/2009, 09h02
  3. Problème d'ouverture de fichier (une fois oui, une fois non)
    Par yadla dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/08/2007, 08h54
  4. Réponses: 13
    Dernier message: 21/12/2005, 12h04

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