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 :

A propos 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
    Mars 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 106
    Par défaut A propos de fread..
    Bonjour,

    j'ouvre des fichiers en mode wb+ (donc logiquement en lecture/écriture binaire) mais j'ai un soucis : je commence par écrire, avec fwrite, puis je fais un fflush et un rewind (pour revenir au début du fichier), et enfin lis ce que je viens d'écrire avec fread.

    Le problème c'est que fread ne me lit rien (l'appel à perror(NULL) me renvoie : "Protocol error").
    Il faut que je ferme le fichier et le réouvre en mode rb pour que je puisse lire.

    J'ai bien ouvert le fichier en mode ab+, et ça marche, mais j'ai vraiment besoin d'utiliser wb+, car plus tard j'utiliserai la fonction tmpfile, qui ouvre les fichiers dans ce mode.

    Avez-vous une idée pour régler ce problème ?

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Un petit bout de code pour nous aider à t'aider, j'ai oublié ma boule de cristal au boulot

    Merci
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 106
    Par défaut
    Il n'y a rien de spécial dans le code, c'est pour ça que je ne l'ai pas mis.

    Déjà, est-ce que le fait de faire des fwrite puis des fread en mode wb+ marche chez quelqu'un ?

    Voici le magnifique bout de code, qui n'a rien de spécial (les fread et fwrite marchent, c'est sûr, mais pas en wb+) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ftmp[0] = fopen("tetmp3", "wb+");
     
    for (p=0 ; p < nl ; p++)
    	fwrite(rouge[p], np, 1, ftmp[0]);
     
    fflush(ftmp[0]);
    rewind(ftmp[0]);
     
    for (j=0 ; j < nl ; j++)
    	fread(rouge[j], np, 1, ftmp[0]);
     
    fclose(ftmp[0]);

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Je ne vois rien de particulier dans ton code si ce n'est qu'il n'y a aucun contrôle sur les valeurs de retour.

    Il faut ajouter des tests après fopen(), fread(), fwrite(), fflush() et fclose(), cela permettra de diagnostiquer un éventuel problème ici.

    Au fait, quelle est la valeur de nl et np lorsque tu rentres dans ta fonction (par la même occasion, peut être qu'un nom plus parlant serait le bienvenue aussi).

    Le problème c'est que fread ne me lit rien (l'appel à perror(NULL) me renvoie : "Protocol error").
    fread lit quelque chose ou retourne une erreur. Après, peut être qu'il le range au mauvais endroit ...
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 106
    Par défaut
    C'est ici une version épurée du code, donc je n'ai pas fait apparaître tous les contrôles sur les valeurs de retour.

    fread ne lit rien (donc retourne 0), mais perror indique Protocol error
    Ca ne peut donc pas être rangé au mauvais endroit, puisqu'aucun octet n'est lu

    Quant aux noms des variables nl et np je suis du même avis que toi mais ce sont des variables pré-existantes

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Au fait, quelle est la valeur de nl et np lorsque tu rentres dans ta fonction
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 106
    Par défaut
    nl vaut 600 et np vaut 443

    Mais j'ai essayé avec nl = np = 10 et ça ne change rien, j'ai toujours des Protocol error

    Edit : j'ai regardé si le rewind marche correctement, et c'est le cas (j'appelle ftell() pour savoir où je suis dans le fichier)

    Edit 2 : ce que je trouve bizarre aussi, c'est que si je supprime le fflush et le rewind, fread se comporte exactement de la même façon

Discussions similaires

  1. a propos de fwrite/fread
    Par Fifou625 dans le forum C
    Réponses: 10
    Dernier message: 28/02/2011, 00h58
  2. A propos des modèles d'objet (avec sources)
    Par DevX dans le forum C++Builder
    Réponses: 14
    Dernier message: 01/12/2002, 12h22
  3. Fonctionnement de la compression DivX
    Par Rodrigue dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 20/09/2002, 14h10
  4. A propos du composant DBGrid
    Par _Rico_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/07/2002, 09h18
  5. fwrite et fread
    Par bohemianvirtual dans le forum C
    Réponses: 5
    Dernier message: 05/06/2002, 12h24

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