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

SL & STL C++ Discussion :

Savoir combien de données ont été lues


Sujet :

SL & STL C++

  1. #1
    Membre régulier

    Inscrit en
    Octobre 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 50
    Points : 70
    Points
    70
    Par défaut Savoir combien de données ont été lues
    Bonjour,

    j'envoie par socket le contenu d'un fichier, à l'aide d'un buffer de taille fixe de 256 octets. Pour ce faire, j'utilise un ifstream et sa fonction read(buffer, count). Je passe donc 256 comme paramètre count.

    Mon problème est que sur le dernier read, il est probable que moins de 256 octets seront lus, et mes clients se retrouvent avec du n'importe quoi après la fin de fichier. Cela leur cause des problèmes. Il faudrait que je leur dise combien d'octets lire dans le buffer que je leur envoie. Or la fonction ifstream::read ne me retourne pas le nombre d'octets lus. Suis-je contraint d'utiliser les fonctions C plutôt ou y a-t-il moyen de le faire avec les streams C++?

    Merci,
    Dr Dédé

  2. #2
    En attente de confirmation mail
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Octobre 2010
    Messages
    501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2010
    Messages : 501
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonsoir,

    Trouvé sur cplusplus.com: aller à la fin du stream, regarder la position puis revenir au début pour faire le boulot.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      // get length of file:
      is.seekg (0, ios::end);
      length = is.tellg();
      is.seekg (0, ios::beg);
     
      // allocate memory:
      buffer = new char [length];
     
      // read data as a block:
      is.read (buffer,length);

  3. #3
    Membre actif

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Points : 206
    Points
    206
    Par défaut
    streamsize gcount ( ) const;

    Get number of characters extracted by last unformatted input operation
    Returns the number of characters extracted by the last unformatted input operation performed on the object.

    The unformatted input operations that modify the value returned by this function are those performed by the following member functions: get, getline, ignore, peek, read, readsome, putback and unget.

    Notice though, that peek, putback and unget do not extract characters. So gcount will always return zero after a call to any of these.

  4. #4
    Membre régulier

    Inscrit en
    Octobre 2010
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 50
    Points : 70
    Points
    70
    Par défaut
    Citation Envoyé par NoIdea Voir le message
    gcount
    Merci, cela règle la question!

  5. #5
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 275
    Points : 10 985
    Points
    10 985
    Par défaut
    @Nudger, pourquoi aller aussi loin ? Nous avons ça dans la FAQ: http://cpp.developpez.com/faq/cpp/?p...HIERS_filesize
    Je crois qu'il y a aussi un truc dans boost.filesystem si jamais il est utilisé.
    Après, cette approche peut s'avérer problématique si le fichier est très gros, une lecture bufférisée à la main peut s'avérer plus efficace dans ces cas là (bien que 256 me paraisse un peu petit, de mémoire), et on en revient à gcount.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

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

Discussions similaires

  1. Savoir si les données envoyées sur USB ont été lu ?
    Par echecetmat dans le forum Débuter
    Réponses: 0
    Dernier message: 20/11/2008, 15h52
  2. Comment savoir combien de personnes ont noté un sujet?
    Par NicolasG dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 4
    Dernier message: 18/04/2006, 09h23
  3. Réponses: 2
    Dernier message: 28/01/2006, 14h54
  4. comment savoir combien il y a d'enregistrements?
    Par isa21493 dans le forum ASP
    Réponses: 5
    Dernier message: 01/09/2005, 14h59
  5. savoir combien il y a de tables dans ma DB ??
    Par deff dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/09/2003, 16h27

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