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 :

probleme de Fread


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Par défaut probleme de Fread
    Bonjour, mon code qui marche pas est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while((length = fread(contenu_bloc,TAILLE_BLOC,nb_bloc,file)) != 0) {
    printf("Contenu : %ld \n", length);
    }
    TAILLE_BLOC est une #define égale a 4096
    contenu_bloc est un char de taille TAILLE_BLOC
    nb_bloc est le nombre de bloc de 4096 a lire (en l'occurence 1)
    lenght est un int.

    Il n'y a pas d'erreur pas rien n'est marqué de la boucle fread, meme pas le "Contenu" du printf !

    +++++++++

  2. #2
    Membre chevronné
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Par défaut
    Citation Envoyé par lapras123
    Bonjour, mon code qui marche pas est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while((length = fread(contenu_bloc,TAILLE_BLOC,nb_bloc,file)) != 0) {
    printf("Contenu : %ld \n", length);
    }
    TAILLE_BLOC est une #define égale a 4096
    contenu_bloc est un char de taille TAILLE_BLOC
    nb_bloc est le nombre de bloc de 4096 a lire (en l'occurence 1)
    lenght est un int.

    Il n'y a pas d'erreur pas rien n'est marqué de la boucle fread, meme pas le "Contenu" du printf !

    +++++++++
    Tu veux dire que contenu_bloc est un tableau de chars de taille TAILLE_BLOC à remplir. Tu n'appelles pas fread comme il faut, tu a inversé taille de la donnée de base pointée (char) et le nombre d'éléments su tampon qui accueille nb (TAILLE_BLOC) données de base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    size_t length;
    /* ... */
    while ( (length = fread(contenu_bloc, sizeof*contenu_bloc, TAILLE_BLOC, file) == TAILLE_BLOC)
    {
        printf("Contenu : %lu \n", (unsigned long)length);
    }
    A+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Par défaut
    Ca marche pas.
    Voila jce que je veux faire :
    J'ai un pointeur sur fichier : file.
    je veux que le fread m'écrive le contenu chaque 4096 caracteres
    Voila on peut m'aider ?

  4. #4
    Membre chevronné
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Par défaut
    Hello,

    Citation Envoyé par lapras123
    Ca marche pas.
    Voila jce que je veux faire :
    J'ai un pointeur sur fichier : file.
    je veux que le fread m'écrive le contenu chaque 4096 caracteres
    Voila on peut m'aider ?
    fread() lit

    Tu veux sans doute dire, je veux que fread() me lise 4096 caracteres du flux d'entree (le fichier) pour les mettre dans un tampon, traiter le tampon en question, puis recommencer par blocs de 4096 caractères jusquà la fin du fichier. Hé bien, ce que je t'ai montre marche très bien. Le souci est après de traiter les données restantes si il n'y a pas N*4096 caractères dans le fichier. Il y a feof() et ferror() pour cela.

    Voici un exemple de lecture par blocs complet :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    #include <stdio.h>
    #include <stdlib.h>
     
    #define MAXBLOCKS   2000
    #define BLOCKSIZE    128
    #define NBCOLS        16
    #define XSTR(s)       #s
    #define STR(s)    XSTR(s) 
     
    int main(int argc, char ** argv)
    {
        unsigned char buf[BLOCKSIZE];
     
        FILE * fd = NULL;
     
        int i, cnt = 0;
     
        size_t nbBytesOneBlock;
     
        if (argc != 2) {
            fprintf(stderr, "Usage: read <file>\n");
            exit(EXIT_FAILURE);
        }
     
        fd = fopen(argv[1], "rb");
        if (!fd) {
            fprintf(stderr, "read: cannot open file '%s' for reading\n", argv[1]);
            exit(EXIT_FAILURE);
        }
     
        /* Lecture par blocs de taille BLOCKSIZE */
        while ( ( nbBytesOneBlock = fread(buf, sizeof*buf, sizeof(buf)/sizeof*buf, fd) ) ==
                    sizeof(buf)/sizeof*buf && cnt < MAXBLOCKS)
        {
            printf("----- Block no %05d -----\n", cnt+1);
            for (i=0; i<sizeof(buf)/sizeof*buf; ++i) {
                printf("%02x ", buf[i]);
                if ( (i+1) % NBCOLS == 0 ) puts("");
            }
            fflush(stdout);
            ++cnt;
        }
     
        /* 
         * Lecture donnees restantes 
         * On n'a pas réussi à lire BLOCKSIZE éléments => EOF ou erreur de lecture 
         */
        if ( nbBytesOneBlock && cnt < MAXBLOCKS) {
            printf("----- Block no %05d -----\n", cnt+1);
            for (i=0; i < (int)nbBytesOneBlock; ++i) {
                printf("%02x ", buf[i]);
                if ( (i+1) % NBCOLS == 0 ) puts("");
            }
            fflush(stdout);
     
            /* 
             * Pourquoi on n'a pas tout lu ? EOF ou erreur ?
             */
            if ( feof(fd) && !ferror(fd) ) {
                puts("\nread: OK, work done!");
            }
            else {
                fprintf(stderr, "\nread: an error occured while reading '%s'\n", argv[1]);
                exit(EXIT_FAILURE);
            }
        }
        else if (cnt >= MAXBLOCKS) {
            fprintf(stderr, "\nread: can't read more than %s blocks!\n", STR(MAXBLOCKS) );
            exit(EXIT_FAILURE);
        }
     
        fclose(fd);
     
        return 0;
     
    }
    A+

    Pour une lecture par blocs de 4096 caractères, suffit de mettre le BLOCKSIZE à 4096.

Discussions similaires

  1. Probleme sur les fichiers (fonction fread)
    Par anoir dsr dans le forum C
    Réponses: 7
    Dernier message: 27/01/2011, 14h31
  2. probleme avec fread
    Par supercyprien dans le forum Débuter
    Réponses: 1
    Dernier message: 21/06/2010, 00h30
  3. Probleme avec fread ou fwrite.. binaire pas lisible ?
    Par titimoi dans le forum Débuter
    Réponses: 16
    Dernier message: 16/01/2009, 13h14
  4. Réponses: 4
    Dernier message: 18/11/2007, 10h20
  5. probleme avec fread
    Par booby dans le forum C
    Réponses: 10
    Dernier message: 06/04/2006, 17h21

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