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 :

lecture successive d un fichier dans une fonction


Sujet :

C++

  1. #1
    Membre habitué Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Points : 193
    Points
    193
    Par défaut lecture successive d un fichier dans une fonction
    Bonjour

    J ai une classe reader qui doit juste lire un gros fichier au fur et a mesure de l appelle d une de ses fonction

    Un de ses attribut est donc un ifstream.

    Probleme, a l'appelle d'un readsome, il ne me lit aucun octet sur un fichier de 500 Mo, et de mieux en mieux, il me lit une image (a quelques octets pres) avec un get

    Encore plus fort, je fais la meme en utilisant un FILE* et fread... et hop, ca fonctionne...

    Deux jours que je bug sur cette.... qui devrait etre d'une banalite affligeante.

    Please... heeeeeeeeelllllpppp
    Avant de poser une question, lire la Avant de répondre, lire la question

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    Y'a une raison d'utiliser readsome() plutôt que read() ?

  3. #3
    Membre habitué Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Points : 193
    Points
    193
    Par défaut
    juste verifier la longueur de ce qui a ete lu...

    Voila le code exacte
    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
    IplImage&
    ImgGrabber::grabNextImg ()
    {
    if (! _srcImg)
    {
       _srcImg = cvCreateImage (cvSize (_width, _height), _depth, _srcType);
       _dstImg = cvCreateImage (cvSize (_width, _height), _depth, _dstType);
    }
     
    fread (_srcImg->imageData, _srcType, _width*_height, file);
    //_fin.readsome (_srcImg->imageData, _width*_height*_srcType); ne marche pas !!!!!!!
    ++_imgCount;
    
    if (_srcType == _dstType)
      return *_srcImg;
    
    cvCvtColor (_srcImg, _dstImg, CV_BGR2GRAY);
      return *_dstImg;
    }
    
    Avant de poser une question, lire la Avant de répondre, lire la question

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    Quand tu utilises read, tu sais quelle taille tu demande à lire, donc s'il n'y a pas d'erreur c'est bien la taille spécifée qui a été lue.
    A moins que le fichier ne serve de 'pipe' et soit rempli au fur et à mesure par une application tier, je ne vois pas l'utilité de readsome.

  5. #5
    Membre habitué Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Points : 193
    Points
    193
    Par défaut
    Tout a fait d accord avec toi, et a l'origine, j'avais meme commencé avec un read...

    Mais ca ne change rien a l'affaire malheureusement
    Avant de poser une question, lire la Avant de répondre, lire la question

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    Dans ton cas, readsome ne sert à rien.
    utilise un read() classique, qui fera à peu de chose près la même chose que ton fread().
    Puis, si tu veux blinder l'affaire, teste si la lecture c'est bien passée.

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ton fichier est bien ouvert en mode binaire ?

  8. #8
    Membre habitué Avatar de harsh
    Inscrit en
    Février 2005
    Messages
    229
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 229
    Points : 193
    Points
    193
    Par défaut
    oui, ouverture en binaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    _fin.open (_fileName, ios_base::binary);
    Avant de poser une question, lire la Avant de répondre, lire la question

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/03/2015, 18h11
  2. Ouvrir un fichier dans une fonction ?
    Par Toulousaing dans le forum VBScript
    Réponses: 3
    Dernier message: 05/11/2010, 12h48
  3. Problème d'appel de fichiers dans une fonction
    Par guilome35 dans le forum Tkinter
    Réponses: 1
    Dernier message: 19/06/2010, 08h17
  4. [PHP-JS] pb lecture script php dans une fonction au démarrage
    Par jerome38000 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 09/02/2005, 15h07
  5. [C#] [WinForms] Lecture d'un fichier dans une archive ZIP
    Par aegypius dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/12/2004, 17h15

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